Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Three.js 获取Object3d子对象的方向_Three.js_Raycasting_Perspectivecamera - Fatal编程技术网

Three.js 获取Object3d子对象的方向

Three.js 获取Object3d子对象的方向,three.js,raycasting,perspectivecamera,Three.js,Raycasting,Perspectivecamera,好吧,问题是:我用透视相机作为Object3d的孩子来追踪它 ... player.add(backCamera); backCamera.position.set(0, 10, -80); backCamera.lookAt(player.position); ... 现在我尝试使用光线投射器在相机和播放器之间找到对象,使它们不可见,但我需要相机位置和相机方向 多亏了这一点,我才能够找到像这样的“真实”相机位置: ... player.updateMatrixWorld(); var vec

好吧,问题是:我用透视相机作为Object3d的孩子来追踪它

...
player.add(backCamera);
backCamera.position.set(0, 10, -80);
backCamera.lookAt(player.position);
...
现在我尝试使用光线投射器在相机和播放器之间找到对象,使它们不可见,但我需要相机位置和相机方向

多亏了这一点,我才能够找到像这样的“真实”相机位置:

...
player.updateMatrixWorld();
var vector = new THREE.Vector3();
var temp = vector.setFromMatrixPosition(backCamera.matrixWorld);
...
但我仍然需要找到“真正”的摄像机方位。我试着遵循这个问题中的方法

...
var pLocal = new THREE.Vector3( 0, 0, -1 );
var pWorld = pLocal.applyMatrix4(backCamera.matrixWorld);
var direction = pWorld.sub(backCamera.position).normalize();

raycaster.set(temp, direction);
...

但是光线似乎没有正确定向,可能是因为定向是相对于父对象的。

知道相机正在查看的目标位置(例如,TP,目标位置),并且您知道相机位置(例如,VRP,视图参考点),相机定向简单地由以下公式给出:

TP-VRP

您可能也希望正常化

因为相机是另一个对象的子对象,所以需要减去相机的世界位置,而不是
camera.position
.hmm@WestLangley为什么没有.setFromMatrixRotation?我想他可以用这个,但它不见了……啊,明白了: