【问题标题】:Setting the projectionMatrix of a Perspective Camera in Three.js在 Three.js 中设置透视相机的 projectionMatrix
【发布时间】:2014-07-16 12:44:03
【问题描述】:

我正在尝试设置 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() 函数,值将保持在我设置的状态。

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

【问题讨论】:

  • 你找到解决这个问题的方法了吗?如果是这样,你能把它贴出来吗?我不得不处理同样的问题。谢谢。

标签: three.js


【解决方案1】:

如果我不调用 updateProjectionMatrix() 函数,值将保持在我设置的状态。

正确,updateProjectionMatrix() 会根据一组参数计算您粘贴在投影矩阵中的 16 个数字。 这些参数是您在上面设置的位置和旋转,加上您为相机传递(或默认)的参数。(这些实际上使matrixWorld 和它的相反。

在透视相机的情况下,您没有太多 - 近、远、fov 和纵横比。 Left、right、top、bottom 都是从这些衍生而来的,使用正交相机直接设置它们。这些然后用于组成投影矩阵。

Scratch a pixel has a REALLY good tutorial on this subject.下一节关于openGL投影矩阵的课其实和WebGL更相关。左右顶部和底部由您的 FOV 和您的纵横比组成。加上近和远,你就得到了一个投影矩阵。

现在,为了让这件事发挥作用,您要么必须知道自己在做什么,要么真的很幸运。从其他地方粘贴这些数字并让它发挥作用是没有中奖的。最好的情况下,您可以将您的比例全部错误并裁剪您的场景。最坏的情况是,你混合了一个完全不同的矩阵,不同的 XYZ 约定,你无法让它工作,或者至少没有任何意义。

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

【讨论】:

  • 您好,首先:感谢您的快速回复:)。我有一个投影到桌子上的投影仪设置,并希望使用 kinects/leap 作为输入设备构建一个 3-d 用户界面,并让投影仪突出显示对象、写入文本等。所以我希望投影仪成为相机在 3-D 场景中,所以我可以指定要显示的对象的 6-D 坐标,它们会
猜你喜欢
  • 1970-01-01
  • 2018-03-31
  • 2014-03-20
  • 2014-02-27
  • 2016-05-13
  • 1970-01-01
  • 1970-01-01
  • 2018-09-08
  • 2021-11-28
相关资源
最近更新 更多