【问题标题】:ThreeJS - Extrude ParametricGeometryThreeJS - 拉伸参数几何
【发布时间】:2018-02-22 20:35:22
【问题描述】:

有什么方法可以将 ExtrudeGeometry 与 ParametricGeometry 一起使用?
像这样:

function exampleGeometryF(u,v){
  var x = -(width/2) + width * u;
  var y = -(height/2) + height *v;
  var z = (Math.sin(u*Math.PI))* -20;
  return new THREE.Vector3(x,y,z);
}

let parametricGeometry = new THREE.ParametricGeometry(exampleGeometryF, 100, 100);
let extrudedGeometry = new THREE.ExtrudeGeometry(parametricGeometry, {amount:10, ...});

所以这个例子中的 parametricGeometry 描述了一个 plane like 几何。现在我想给这个几何图形一个深度。 欢迎使用解决方法!

【问题讨论】:

    标签: javascript three.js geometry


    【解决方案1】:

    特别是对于具有一定“深度”的平面几何体,您可以对盒子几何体进行变形:

    var scene = new THREE.Scene();
    var camera = new THREE.PerspectiveCamera(60, window.innerWidth / window.innerHeight, 1, 1000);
    camera.position.setScalar(3);
    var renderer = new THREE.WebGLRenderer();
    renderer.setSize(window.innerWidth, window.innerHeight);
    document.body.appendChild(renderer.domElement);
    
    var controls = new THREE.OrbitControls(camera, renderer.domElement);
    
    var boxGeom = new THREE.BoxGeometry(2, 2, 3, 10, 10, 1);
    boxGeom.vertices.forEach(v => {
      v.z += Math.cos(v.x * 2) * Math.sin(v.y * 2) * 0.125;
    });
    
    var deformed = new THREE.Mesh(boxGeom, new THREE.MeshBasicMaterial({
      color: "aqua",
      wireframe: true
    }));
    scene.add(deformed);
    
    render();
    
    function render() {
      requestAnimationFrame(render);
      renderer.render(scene, camera);
    }
    body {
      overflow: hidden;
      margin: 0;
    }
    <script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/90/three.min.js"></script>
    <script src="https://threejs.org/examples/js/controls/OrbitControls.js"></script>

    【讨论】:

    • 谢谢,这是个好主意!我会尝试解决我的问题,然后将您的答案标记为正确! :)
    猜你喜欢
    • 2022-01-17
    • 2019-08-13
    • 1970-01-01
    • 2016-09-22
    • 2016-12-04
    • 2013-11-06
    • 2020-02-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多