OpenGL中矩阵的平移与旋转的顺序问题

        GLfloat m1[16];
        glMatrixMode(GL_MODELVIEW);
	glPushMatrix();
	glLoadIdentity();
	glTranslatef(-r1[0], -r1[1], 0);  
	glRotatef(theta, rotatev.m_fVec[0], rotatev.m_fVec[1], rotatev.m_fVec[2]); 
        glGetFloatv(GL_MODELVIEW_MATRIX, m1);
	glPopMatrix();
得到m1矩阵,可以对其他坐标进行平移旋转变换



但此处有个顺序要注意,OpenGL的平移旋转都是相对于坐标系来的,而且是按照列向量矩阵进行右乘。


所以,当自己想做平移旋转的时候,平移旋转的量一般都是相对于一个坐标系A。


如果先旋转后平移,那么对于OpenGL来说是先旋转了坐标系A得坐标系B,然后按照此时的坐标系B做平移变换,这个平移变换必然不是我们期望在原坐标系A中的平移变换。


所以先平移后旋转才没有问题。

你可能感兴趣的:(Matrix)