使用Projection将World粒子坐标转换为Three.js中的Screen坐标

时间:2014-05-01 03:30:45

标签: javascript 3d three.js

我试图获得三个体系内顶点的屏幕坐标。我一直在尝试使用Three.js: converting 3d position to 2d screen position中的以下代码执行此操作:

function toScreenXY( position, camera, div ) {
    var pos = position.clone();
    projScreenMat = new THREE.Matrix4();
    projScreenMat.multiply( camera.projectionMatrix, camera.matrixWorldInverse );
    projScreenMat.multiplyVector3( pos );

    var offset = findOffset(div);

    return {
        x: ( pos.x + 1 ) * div.width / 2 + offset.left,
        y: ( - pos.y + 1) * div.height / 2 + offset.top
    };
}

function findOffset(element) { 
    var pos = new Object();
    pos.left = pos.top = 0;        
    if (element.offsetParent)  
    { 
        do  
        { 
            pos.left += element.offsetLeft; 
            pos.top += element.offsetTop; 
        } while (element = element.offsetParent); 
    } 
    return pos;
}

我用以下信息称呼它:

var test = toScreenXY(particleGeometry.vertices[i].clone(), camera, renderer.domElement);

然而,返回的坐标与屏幕坐标不匹配。

还有其他一些例子可以讨论,但它们似乎不适用(Converting World coordinates to Screen coordinates in Three.js using Projection),因为所引用的“对象”不能是定义顶点的Vector3D。

在粒子系统中获取粒子屏幕位置的简单方法是什么?

0 个答案:

没有答案