2

我找不到如何使用偏航、俯仰和滚动创建视图矩阵。我正在使用 LWJGL 并有一个可用的旋转功能。

    viewMatrix.setZero();
    viewMatrix.rotate(pitch, new Vector3f(1.0f, 0.0f, 0.0f));
    viewMatrix.rotate(yaw, new Vector3f(0.0f, 1.0f, 0.0f));
    viewMatrix.rotate(roll, new Vector3f(0.0f, 0.0f, 1.0f));
    viewMatrix.m33 = 1.0f;
    viewMatrix.translate(position);

我在做一些根本上错误的事情,我讨厌我无法修复它,因为缺乏文档(或我缺乏谷歌技能)。

我不转置矩阵。

请注意,位置是一个零向量,我在屏幕上看不到任何东西(当视图矩阵为零时,我会看到)。

补充:我试图达到以下等价物:

    GL11.glRotatef(pitch, 1.0f, 0.0f, 0.0f);
    GL11.glRotatef(yaw, 0.0f, 1.0f, 0.0f);
    GL11.glRotatef(roll, 0.0f, 0.0f, 1.0f);
    GL11.glTranslatef(position.x, position.y, position.z);
4

2 回答 2

3

您应该使用viewMatrix.setIdentity()而不是viewMatrix.setZero()最初将矩阵设置为单位矩阵,而不是将矩阵归零。

于 2013-02-19T14:12:12.010 回答
0

像这样的复合旋转是错误的方法,试试这个:http ://tutorialrandom.blogspot.com/2012/08/how-to-rotate-in-3d-using-opengl-proper.html

于 2013-02-19T13:18:26.447 回答