所以,我有,我希望周围的任何其三个轴(立方体,不是窗口的轴)旋转的立方体。 正如许多其他类似的问题已经指出,我的轮换工作,只要我只在一个方向旋转,但是当我开始将它们混合,我得到了奇怪的结果。 特别是,关于y轴的旋转总是围绕窗口的y轴,不管如何立方体已经旋转。
我的绘制代码如下:
glMatrixMode(GL_MODELVIEW) ;
glLoadIdentity();
gluLookAt(0.0, 5.0, 15.0,
0.0, 0.0, 0.0,
0.0, 1.0, 0.0);
glPushMatrix();
glRotatef(theta_y,0,1,0);
glRotatef(theta_x,1,0,0);
glRotatef(theta_z,0,0,1);
draw_cube();
glPopMatrix();
这个问题似乎来形容非常正是我试图做的,和接受的答案似乎正是我想做的事,但他提供的链接已经死了。
从我可以在链接的问题收集,我的Z-旋转首先执行,这意味着我的X-旋转(这将是下一个)我需要,而不是绕着(1,0,0),我会旋转约(-sin(theta_z),COS(theta_z),0)。 但随后的第三旋转,他只给出了链接,称它变得“很复杂”。 现在链接已经死了,我不知道如何去了解这个第三旋转。
编辑:基于答复,我已经增加了三个载体: cube_x
, cube_y
和cube_z
持本人cube.They当前轴初始化如下:
float cube_x[] = {1.0f,0.0f,0.0f,0.0f};
float cube_y[] = {0.0f,1.0f,0.0f,0.0f};
float cube_z[] = {0.0f,0.0f,1.0f,0.0f};
早在我的绘图功能,我已经改变了它,这样的旋转围绕这些轴,而不是因为我以前有全球的坐标轴来完成。 执行三个旋转后,我打电话glGetFloatv
获取当前的矩阵,并使用新的功能, update_vector
填补我的立方体向量与他们的新价值观。 这一切都包含如下:
void update_vector(float vector[],float matrix[]) {
vector[0] = matrix[0]*vector[0] + matrix[1]*vector[1] + matrix[2]*vector[2] + matrix[3]*vector[3];
vector[1] = matrix[4]*vector[0] + matrix[5]*vector[1] + matrix[6]*vector[2] + matrix[7]*vector[3];
vector[2] = matrix[8]*vector[0] + matrix[9]*vector[1] + matrix[10]*vector[2] + matrix[11]*vector[3];
vector[3] = matrix[12]*vector[0] + matrix[13]*vector[1] + matrix[14]*vector[2] + matrix[15]*vector[3];
}
void my_display(void) {
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT) ;
glMatrixMode(GL_MODELVIEW) ;
glLoadIdentity();
gluLookAt(0.0, 5.0, 15.0,
0.0, 0.0, 0.0,
0.0, 1.0, 0.0);
glPushMatrix();
glRotatef(theta_y,cube_y[0],cube_y[1],cube_y[2]);
glRotatef(theta_x,cube_x[0],cube_x[1],cube_x[2]);
glRotatef(theta_z,cube_z[0],cube_z[1],cube_z[2]);
//get the current matrix
float my_matrix[16];
glGetFloatv(GL_MODELVIEW_MATRIX, my_matrix);
//Multiply the matrix by each of my vectors
update_vector(cube_x,my_matrix);
update_vector(cube_y,my_matrix);
update_vector(cube_z, my_matrix);
make_cube();
glPopMatrix();
/* buffer is ready */
glutSwapBuffers();
return ;
}
现在,当我尝试绕Y轴,立方体似乎终于安定入一个绕X轴旋转沿着前几轴摆动周围一点点。 旋转绕Z做同样的事情。 只有绕X轴似乎工作。
编辑: 解:
在下面他的评论,加文提到,Y轴旋转总是发生第一次。 这是整个问题。 通过增加一个标志ROT
,并在此基础上轴线我试图绕设置它,我能够使轴心旋转约是去年完成订购的旋转。