THREE.js从3D向量转换为2D像素位置,并解释z坐标

时间:2019-01-09 01:15:44

标签: javascript three.js

我引用了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?它实际上代表什么?

1 个答案:

答案 0 :(得分:1)

module not found error表示该点距屏幕的深度。关于像素或屏幕上的位置,深度无关紧要,因为它不会影响屏幕上的vector.zx位置。因此向量的该分量不是解决方案的一部分,因此被忽略。

为什么它不是y,这是因为投影将顶点与摄影机矩阵相乘。假设照相机的位置可以查看您需要的所有东西,而不是指向其他地方,则投影功能就是在您和场景之间建立距离(即深度)。