我引用了this SO帖子,该帖子解释了如何将3D空间中的点转换为显示器上的实际像素位置。这是函数,为方便起见进行了复制。
function toScreenPosition(obj, camera)
{
var vector = new THREE.Vector3();
var widthHalf = 0.5*renderer.context.canvas.width;
var heightHalf = 0.5*renderer.context.canvas.height;
obj.updateMatrixWorld();
vector.setFromMatrixPosition(obj.matrixWorld);
vector.project(camera);
vector.x = ( vector.x * widthHalf ) + widthHalf;
vector.y = - ( vector.y * heightHalf ) + heightHalf;
return {
x: vector.x,
y: vector.y
};
};
我注意到vector.z
在使用vector.project(camera)
投影后实际上不是0。对于我的特定设置,vector.z
约为0.8(这对一般性问题来说意义不大)。
那么,我应该如何解释vector.z
?它实际上代表什么?
答案 0 :(得分:1)
module not found error
表示该点距屏幕的深度。关于像素或屏幕上的位置,深度无关紧要,因为它不会影响屏幕上的vector.z
或x
位置。因此向量的该分量不是解决方案的一部分,因此被忽略。
为什么它不是y
,这是因为投影将顶点与摄影机矩阵相乘。假设照相机的位置可以查看您需要的所有东西,而不是指向其他地方,则投影功能就是在您和场景之间建立距离(即深度)。