【发布时间】:2017-11-01 09:43:28
【问题描述】:
大多数关于three.js 的教程/问题都建议使用three.js 围绕点旋转对象的方法是在要旋转的位置创建父对象,附加对象,然后移动子对象。然后,当父级旋转时,子级围绕该点旋转。例如;
//Make a pivot
var pivot = new THREE.Object3D();
//Make an object
var object = new THREE.Mesh( new THREE.BoxGeometry(2,2,2), new THREE.MeshBasicMaterial() );
//Add object to pivot
pivot.add(object);
//Move object away from pivot
object.position.set(new THREE.Vector3(5,0,0));
//rotate the object 90 degrees around pivot
pivot.rotation.y = Math.PI / 2;
这是可行的,但它的限制令人难以置信 - 如果你想围绕不同的点旋转一个对象,你就不能这样做,因为一个对象不能有两个父对象。
下一个可行的方法是将旋转矩阵应用于对象的位置,例如;
//Make an object
var object = new THREE.Mesh( new THREE.BoxGeometry(2,2,2), new THREE.MeshBasicMaterial() );
//Move the object
object.position.set(new THREE.Vector3(5,0,0);
//Create a matrix
var matrix = new THREE.Matrix4();
//Rotate the matrix
matrix.makeRotationY(Math.PI / 2);
//rotate the object using the matrix
object.position.applyMatrix4(matrix);
同样,这可行,但似乎没有办法设置旋转点。它永远是世界的起源。
另一个选项是 sceneUtils 中的实用方法,用于将子对象与父对象分离,另一种方法用于附加新父对象,但该文档警告不要使用它,并且从未在任何示例代码中使用过。
最终我希望能够使立方体遵循 S 形路径,但如果没有这个(看似)基本的东西,我会发现它相当困难。
tl;dr 我想围绕一系列不同的点旋转一个three.js 对象。解决这个问题的好方法是什么?
【问题讨论】:
-
看看这是否有帮助:stackoverflow.com/a/32038265/1461008
-
这很有帮助。谢谢。
标签: javascript three.js