在Three.js中设置透视摄像机的projectionMatrix

时间:2014-05-27 14:32:27

标签: three.js

我正在尝试将Three.js透视相机的ProjectionMatrix设置为与使用其他程序计算的投影矩阵相匹配。

所以我像这样设置相机的位置和旋转:

self.camera.position.x = 0;
self.camera.position.y = 0;
self.camera.position.z = 142 ;
self.camera.rotation.x = 0.0;// -0.032
self.camera.rotation.y = 0.0;
self.camera.rotation.z = 0;

接下来,我创建了一个4x4矩阵(在Three.js中称为Matrix4),如下所示:

var projectionMatrix = new THREE.Matrix4(-1426.149, -145.7176, -523.0170, 225.07519, -42.40711, -1463.2367, -23.6839, 524.3322, -0.0174, -0.11928, -0.99270, 0.43826, 0, 0, 0, 1);

并更改了相机的投影矩阵条目,如下所示:

for ( var i = 0; i < 16; i++) {
    self.camera.projectionMatrix.elements[i] = projectionMatrix.elements[i];
}

当我现在渲染场景时,我只得到一个黑色的屏幕,看不到我插入的任何物体。转动相机的角度也无济于事。我仍然看不到任何物体。

如果我插入

self.camera.updateProjectionMatrix();

将相机的投影矩阵设置为我的projectionMatrix的值后,相机将被设置回原始位置(x = 0,y = 0,z = 142,并查看我创建一些对象的原点)和值我设置在相机的矩阵似乎已被覆盖。我通过将摄像机投影矩阵打印到控制台来检查。如果我没有调用updateProjectionMatrix()函数,则值将保持为我设置它们。

有人知道如何解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

  

如果我没有调用updateProjectionMatrix()函数,则值保持不变。

更正,updateProjectionMatrix()根据一堆参数计算您在投影矩阵中粘贴的16个数字。这些参数是您在上面设置的位置和旋转,以及您为摄像机传递的参数(或默认值)。如果是透视相机,你就不会有太多 - 近,远,fov和方面。

Scratch a pixel has a REALLY good tutorial on this subject.关于openGL投影矩阵的下一课实际上与WebGL更相关。左上方和右下方是根据您的FOV和纵横比制作的。添加近处和远处,您已经拥有了投影矩阵。

现在,为了让这件事能够奏效,您要么必须知道自己在做什么,要么真的很幸运。将这些数字从其他地方粘贴并使其发挥作用就不足以赢得彩票。最好的情况是,您可以将您的比例全部错误并剪裁您的场景。最糟糕的情况是,您混合了一个完全不同的矩阵,不同的XYZ惯例,并且您无法让它工作,或者至少是有意义的。

出于好奇,你想做什么?您是否尝试将相机与其他地方的相机匹配?

相关问题