我正在尝试使用旋转矩阵旋转多维数据集的顶点,但是每当我运行程序时,多维数据集就会消失。
我正在使用在演讲中提供给我们的旋转矩阵,该矩阵旋转多维数据集的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);
我正在努力查看问题出在哪里。
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] 删除。
我来说两句