ThreeJS 相机朝向点
ThreeJS camera facing point
在 ThreeJS 中,如果相机以任何给定角度旋转,我如何确定该点在相机朝向的方向上刚好 1 个单位的坐标。
如果你不熟悉 ThreeJS 相机旋转角度,旋转非常非常奇怪。
例如,如果我所有的旋转变量都是 0,那么函数将 return (0, 0, -1).
如果旋转 x 是 Pi / 2(90 度),那么函数将 return (1, 0, 0)
我如何创建一个函数来执行此操作?我不需要所有东西,主要是数学。
你想获取相机前一个单位的点的世界位置。
一种方法是在相机前面添加一个对象,并将其作为相机的子对象。那么你只需要查询对象的世界位置即可。
默认情况下,当相机的旋转角度为 ( 0, 0, 0 ) 时,相机会向下看其负 z 轴。所以这是要遵循的模式:
var object = new THREE.Object3D();
object.position.set( 0, 0, - 1 );
scene.add( camera ); // this is required when the camera has children
camera.add( object );
现在,你可以像这样得到你需要的点:
var worldPos = new THREE.Vector3(); // create once and reuse it
...
camera.updateMatrixWorld(); // this is called in the render loop, so you may not have to call it again. Experiment.
worldPos.setFromMatrixPosition( object.matrixWorld );
three.js r.71
在 ThreeJS 中,如果相机以任何给定角度旋转,我如何确定该点在相机朝向的方向上刚好 1 个单位的坐标。
如果你不熟悉 ThreeJS 相机旋转角度,旋转非常非常奇怪。
例如,如果我所有的旋转变量都是 0,那么函数将 return (0, 0, -1).
如果旋转 x 是 Pi / 2(90 度),那么函数将 return (1, 0, 0)
我如何创建一个函数来执行此操作?我不需要所有东西,主要是数学。
你想获取相机前一个单位的点的世界位置。
一种方法是在相机前面添加一个对象,并将其作为相机的子对象。那么你只需要查询对象的世界位置即可。
默认情况下,当相机的旋转角度为 ( 0, 0, 0 ) 时,相机会向下看其负 z 轴。所以这是要遵循的模式:
var object = new THREE.Object3D();
object.position.set( 0, 0, - 1 );
scene.add( camera ); // this is required when the camera has children
camera.add( object );
现在,你可以像这样得到你需要的点:
var worldPos = new THREE.Vector3(); // create once and reuse it
...
camera.updateMatrixWorld(); // this is called in the render loop, so you may not have to call it again. Experiment.
worldPos.setFromMatrixPosition( object.matrixWorld );
three.js r.71