【问题标题】:THREE.JS - Vector3.project returns weird resultTHREE.JS - Vector3.project 返回奇怪的结果
【发布时间】:2018-10-01 07:11:53
【问题描述】:

我正在用 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

【问题讨论】:

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


    【解决方案1】:

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

    在我的例子中,我只需要调用camera.getWorldPosition(),它更新了相机世界矩阵,point.project(camera) 开始按预期工作。

    【讨论】:

      【解决方案2】:

      要设置相机位置,您需要使用设置器(如果我没记错的话,这自 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);
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-08-08
        • 2012-12-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多