使用Three.js将Vector3点转换为屏幕空间(Vector2)[73]

时间:2016-01-10 21:45:41

标签: three.js

我在一个看原点(0,0,0)的位置初始化了一个透视相机。阅读我发现的最常见的解决方案是https://stackoverflow.com/a/27412386/1330719所描述的解决方案。

根据我对project方法的理解,我应该得到一个向量,其中x,y坐标介于-1和1之间。这似乎并非如此,我结束了获得完全超出范围的坐标。

此外,如果原始矢量点位于(0,0,0),我似乎得到(NaN,NaN)。如果我的相机正在查看位置(0,0,0),我希望Vector3(0,0,0)返回(宽度/ 2,高度/ 2)。

如果需要,这就是我初始化相机的方式:

this.camera = new THREE.PerspectiveCamera(90, window.innerWidth / window.innerHeight, 1, 10E5);

this.camera.position.set(0, 500, -500);
this.camera.lookAt(new THREE.Vector3(0,0,0));

this.camera.updateProjectionMatrix();

有没有人有理由说这可能不起作用?或者,在给定相机的情况下,将Vector3点映射到屏幕空间的推荐方法是什么?

我的意思是: https://jsfiddle.net/m78wjLyc/

1 个答案:

答案 0 :(得分:1)

在投影之前,您还应该使用camera.updateMatrixWorld(true)

通常这是由渲染器自动完成的,但是你没有使用任何一个,所以camera.matrixWorld在你改变位置后保持不变,并使相机投射出像它一样的东西是世界起源的。