three.js - 如何在 Three.js 中高效创建管道

标签 three.js

我正在努力在 THREE.js 中制作 pipe ,并且关于它们的教程很少,所以我决定在这里询问。如何在不使用官方文档中这段困难代码的情况下创建一个 pipe ?

    class CustomSinCurve extends THREE.Curve {

        constructor( scale = 1 ) {

            super();

            this.scale = scale;

        }

        getPoint( t, optionalTarget = new THREE.Vector3() ) {

            const tx = t * 3 - 1.5;
            const ty = Math.sin( 2 * Math.PI * t );
            const tz = 0;

            return optionalTarget.set( tx, ty, tz ).multiplyScalar( this.scale );

        }
    }

最好使用贝塞尔曲线或直观的东西。 (需要明确的是,我使用 React-三纤维来创建这些模型,但我知道如何将普通 THREE.js 转换为它。)

最佳答案

像这样尝试一下:

let mesh;
let camera, scene, renderer;

init();
animate();

function init() {

  camera = new THREE.PerspectiveCamera(70, window.innerWidth / window.innerHeight, 0.01, 10);
  camera.position.z = 4;

  scene = new THREE.Scene();

  const curve = new THREE.QuadraticBezierCurve3(new THREE.Vector3(-1, -1, 0), new THREE.Vector3(-1, 1, 0), new THREE.Vector3(1, 1, 0))

  const geometry = new THREE.TubeGeometry(curve);
  const material = new THREE.MeshNormalMaterial({
    side: THREE.DoubleSide
  });

  mesh = new THREE.Mesh(geometry, material);
  scene.add(mesh);

  renderer = new THREE.WebGLRenderer({
    antialias: true
  });
  renderer.setPixelRatio(window.devicePixelRatio);
  renderer.setSize(window.innerWidth, window.innerHeight);
  document.body.appendChild(renderer.domElement);


}

function animate() {

  requestAnimationFrame(animate);

  mesh.rotation.y += 0.01;

  renderer.render(scene, camera);

}
body {
      margin: 0;
}
<script src="https://cdn.jsdelivr.net/npm/<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="5f2b372d3a3a1f6f716e6c6c716e" rel="noreferrer noopener nofollow">[email protected]</a>/build/three.min.js"></script>

示例代码使用简单的二次贝塞尔曲线来生成管的形状。

关于three.js - 如何在 Three.js 中高效创建管道,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69712262/

相关文章:

javascript - 如何使用树数据结构提高复杂几何体的碰撞检测性能?

javascript - three.js - 有什么方法可以从 3d 工作室导入文件吗?

javascript - 在三个 JS 上创建从经纬度开始的路径

javascript - 更改网格颜色按钮按三个 js

javascript - 三个jslensflare渲染在外面

javascript - 如何使用轨道控制添加不同的摄像机?

javascript - 三JS半球

javascript - 如果 new THREE.CSS2DObject 处没有 'new',则无法调用类构造函数 Object3D

javascript - 计算 3d 空间中特定距离的两点之间的点

shader - Three.js 中的自定义纹理着色器