在Three.JS中,我可以旋转物体的原点。例如,如果我要用一条直线来完成此操作,则该直线会旋转,但其顶点的位置不会随其新位置更新。有什么方法可以将旋转矩阵应用到顶点的位置以找到点的新位置?假设我在x轴上以(0,0,0)和(0,100,100)为点旋转45°,y轴上旋转20°,z轴上旋转100°。我将如何去寻找相对于整个场景的顶点的实际位置。Three.JS:获取旋转物体的位置
谢谢
在Three.JS中,我可以旋转物体的原点。例如,如果我要用一条直线来完成此操作,则该直线会旋转,但其顶点的位置不会随其新位置更新。有什么方法可以将旋转矩阵应用到顶点的位置以找到点的新位置?假设我在x轴上以(0,0,0)和(0,100,100)为点旋转45°,y轴上旋转20°,z轴上旋转100°。我将如何去寻找相对于整个场景的顶点的实际位置。Three.JS:获取旋转物体的位置
谢谢
是的,'整个场景'是指世界的位置。
THREE.Vector3()具有applyMatrix4()方法,
你可以做同样的事情,着色器,以投射到顶点的世界空间,你会做这个
yourPoint.applyMatrix4(yourObject.matrixWorld);
这样做
项目是进入相机的空间,您可以将此未来
yourPoint.applyMatrix4(camera.matrixWorld);
获得在-1实际屏幕位置1
yourPoint.applyMatrix4(camera.projectionMatrix);
你会访问你的观点是这样
var yourPoint = yourObject.geometry.vertices[0]; //first vertex
也,而不是做了三次,你可以结合矩阵。没有对此进行测试,而是沿着这条线进行测试。可以走另一条路:
var neededPVMmatrix = new THREE.Matrix4().multiplyMatrices(yourObject.matrixWorld, camera.matrixWorld);
neededPVMmatrix.multiplyMatrices(neededPVMmatrix, camera.projectionMatrix);
,如果你需要什么这样做的引擎盖下一个很好的教程,我建议this
Alteredq发布一切有了解three.js所矩阵here
编辑
但有一点需要注意,如果您只想旋转,而不是翻译,则需要使用上面的3x3部分,即r选择矩阵,模型世界矩阵。这可能会稍微复杂一些。我忘了three.js给你的东西,但我认为normalMatrix会做到这一点,或者你可以将你的THREE.Vector3()转换为THREE.Vector4(),并将.w设置为0,这将阻止任何翻译被应用。
EDIT2
如果你想在你的榜样招行的点,而不是把它应用到粒子,它适用于
var yourVertexWorldPosition = new THREE.Vector3().clone(geo.vertices[1]); //this is your second line point, to whatever you set it in your init function
yourVertexWorldPosition.applyMatrix4();//this transforms the new vector into world space based on the matrix you provide (line.matrixWorld)
谢谢,我会尝试了这一点。 – mjkaufer
我的代码位于dev.kaufer.org/angle。在控制台中,当我调用'applyRotation(0,Math.PI/4,0)'时,在y上旋转45°线,该点不移动。但是,如果我再次调用'applyRotation(0,Math.PI/2,0)',那么粒子就会移动到应该出现的位置。你可以运行'applyRotation'来查看它的代码。 – mjkaufer
看看我的编辑,你需要将此应用到你的实际顶点,使行 – pailhead