Как эффективно создавать трубки в three.js

#three.js

Вопрос:

Я изо всех сил пытаюсь сделать трубки в THREE.js и по ним очень мало учебных пособий, поэтому я решил спросить здесь. Как я могу создать пробирку, не используя этот сложный фрагмент кода, взятый из официальных документов?

 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 к нему.)

Ответ №1:

Попробуй вот так:

 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; } 
 lt;script src="https://cdn.jsdelivr.net/npm/three@0.133.1/build/three.min.js"gt;lt;/scriptgt; 

В примере кода используется простая квадратичная кривая Безье для создания формы трубки.