THREE.JS - Vector3.project返回奇怪的结果

时间:2015-02-02 06:05:57

标签: javascript vector 3d three.js 2d

我正在THREE.JS中编写程序,我需要投射一个Vector3。当我尝试投影Vector3(0,0,0)时,它应该在我相机的屏幕中央,我得到了NaN。其他所有可见的Vector3(虽然可见性不会产生影响,对吗?)返回NaN,0,Infinity和-1到0之间的随机数(通常)。这是一些代码:

camera.position.x=32;
camera.position.y=32;
camera.position.z=32;
camera.lookAt(new THREE.Vector3(0,0,0));
for(var x=0;x<=16;x++)
{
    for(var z=0;z<=16;z++)
    {
        var p=new THREE.Vector3(x,0,z).project(camera);
        alert(p.x+" "+p.y+" "+p.z);
        //HELP!!!
    }
}

谢谢:D

2 个答案:

答案 0 :(得分:0)

要设置摄像机位置,您需要使用setter(自r67以来这已更改?如果我没有记错的话)。像这样:

camera.position.setX( 32 );
camera.position.setY( 32 );
camera.position.setZ( 32 );

camera.position.set( 32, 32, 32 );

由于您没有使用制定者,因此相机的位置很可能也是(0, 0, 0)

无法将Vector从自身投射到自身。将来防止这种情况的解决方案可能是添加一个子句来检查摄像机位置与向量的相等性:

vector = new THREE.Vector3( x, 0, z );
if( ! camera.position.equals( vector ) ){
    var p = vector.project(camera);
}

答案 1 :(得分:0)

在使用PerspectiveCamera而不使用Scene或WebGLRenderer来计算Vector3的投影坐标时,我遇到了这个问题。

就我而言,我只需要打电话给camera.getWorldPosition(),它更新了相机世界矩阵,point.project(camera)开始按预期工作。