我在一个看原点(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点映射到屏幕空间的推荐方法是什么?
答案 0 :(得分:1)
在投影之前,您还应该使用camera.updateMatrixWorld(true)
。
通常这是由渲染器自动完成的,但是你没有使用任何一个,所以camera.matrixWorld
在你改变位置后保持不变,并使相机投射出像它一样的东西是世界起源的。