【问题标题】:OpenGL: Change Camera's view port in 3D by given 4-by-4 matrixOpenGL:通过给定的 4×4 矩阵更改 3D 相机视口
【发布时间】:2014-10-09 12:18:33
【问题描述】:

我现在正在尝试将给定 4×4 矩阵下的相机视口更改为

R11 R12 R13  transx
R21 R22 R23  transy
R31 R32 R33 transz
0    0    0     1

R 是 3×3 旋转矩阵,而 transx、transy、transz 是 3D 空间中沿 x、y 和 z 轴的平移。

我的代码如下

eyex = transx;
eyey = transy;
eyez = transz;

atx = transx;
aty = transy;
atz = transz+1;

gluLookAt (R11*eyex + R12*eyey + R13*eyez, R21*eyex + R22*eyey + R23*eyez, R31*eyex + R32*eyey + R33*eyez, atx, aty, atz,  0.0, 1.0, 0.0);

但是,我无法得到正确的结果。 (旋转似乎没问题,但翻译出现问题)

有人能找出我代码中的错误吗?

【问题讨论】:

  • 只需使用glRotatef/glTranslatef 来构建您的相机矩阵。我喜欢将此视为反向/负向执行所有操作,例如向左移动场景以向右移动虚拟摄像机。如果您已经有一个相机矩阵,只需使用glLoadMatrixf,但如果它是一个世界到相机矩阵,则首先需要inverting

标签: opengl


【解决方案1】:

不太确定你想做什么,但你似乎在混淆问题。 gluLookAt 是一个为您生成 cam-to-world 矩阵的函数,通过将眼睛位置和您正在查看的点传递给该函数。所以简而言之,要么您使用 gluLooAt 构建矩阵,要么您自己为相机构建矩阵,并使用它来设置 OpenGL cam-to-world 矩阵。

在 OpenGL4 中,这将在 CPU 上完成(构建该矩阵),然后将其加载到顶点着色器中。最后你会将你的物体变换到世界空间,然后在相机空间中变换世界空间中的顶点,最后使用透视投影矩阵进行投影。

你可以在这个网站上找到一些信息:www.scratchapixel.com

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多