使用旋转矩阵旋转立方体的顶点

杰安特

我正在尝试使用旋转矩阵旋转多维数据集的顶点,但是每当我运行程序时,多维数据集就会消失。

我正在使用在演讲中提供给我们的旋转矩阵,该矩阵旋转多维数据集的x坐标。

double moveCubeX = 0;
float xRotationMatrix[9] = {1, 0, 0,
                            0, cos(moveCubeX), sin(moveCubeX),
                            0, -sin(moveCubeX), cos(moveCubeX) 
};

我使用键盘上的“ t”键添加到moveCubeX变量

case 't':
    moveCubeX += 5;
    break;

并做我正在使用的矩阵乘法

glMultMatrixf();

但是,当我在运行它时将其添加到我的代码中时,多维数据集就消失了。这是我添加glMultMatrixf()函数的地方。

void display(void)
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glLoadIdentity();

    gluLookAt(pan, 0, -g_fViewDistance, 
              pan, 0, -1,
              0, 1, 0);

    glRotatef(rotate_x, 1.0f, 0.0f, 0.0f);   //Rotate the camera
    glRotatef(rotate_y, 0.0f, 1.0f, 0.0f);   //Rotate the camera

    glMultMatrixf(xRotationMatrix);

我正在努力查看问题出在哪里。

雷托·科拉迪(Reto Koradi)

OpenGL使用大小为4x4的矩阵。因此,您的旋转矩阵需要扩展为4行4列,总共16个元素:

float xRotationMatrix[16] = {1.0f, 0.0f, 0.0f, 0.0f,
                             0.0f, cos(moveCubeX), sin(moveCubeX), 0.0f,
                             0.0f, -sin(moveCubeX), cos(moveCubeX), 0.0f,
                             0.0f, 0.0f, 0.0f, 1.0f};

您还需要注意角度的单位。由于您5每次用户按下一个键时都会增加角度,因此您似乎在思考度数。C / C ++库中的标准cos()sin()函数期望角度以弧度为单位。

另外,看起来您的矩阵是在全局级别定义的。如果执行此操作,则仅在程序启动时对元素进行一次评估。您将必须使矩阵定义位于本地display(),以便每次绘制时都重新评估矩阵,或者每次角度改变时都更新矩阵。

对于第二个选项,每次角度更改时,您只能更新依赖于角度的矩阵元素。在修改的函数中moveCubeX,添加:

xRotationMatrix[5] = cos(moveCubeX);
xRotationMatrix[6] = sin(moveCubeX);
xRotationMatrix[9] = -sin(moveCubeX);
xRotationMatrix[10] = cos(moveCubeX);

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章