我正在尝试将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()函数,则值将保持为我设置它们。
有人知道如何解决这个问题吗?
答案 0 :(得分:0)
如果我没有调用updateProjectionMatrix()函数,则值保持不变。
更正,updateProjectionMatrix()根据一堆参数计算您在投影矩阵中粘贴的16个数字。这些参数是您在上面设置的位置和旋转,以及您为摄像机传递的参数(或默认值)。如果是透视相机,你就不会有太多 - 近,远,fov和方面。
Scratch a pixel has a REALLY good tutorial on this subject.关于openGL投影矩阵的下一课实际上与WebGL更相关。左上方和右下方是根据您的FOV和纵横比制作的。添加近处和远处,您已经拥有了投影矩阵。
现在,为了让这件事能够奏效,您要么必须知道自己在做什么,要么真的很幸运。将这些数字从其他地方粘贴并使其发挥作用就不足以赢得彩票。最好的情况是,您可以将您的比例全部错误并剪裁您的场景。最糟糕的情况是,您混合了一个完全不同的矩阵,不同的XYZ惯例,并且您无法让它工作,或者至少是有意义的。
出于好奇,你想做什么?您是否尝试将相机与其他地方的相机匹配?