我是opengl的新手。我尝试用自己的矩阵移动球体,但结果不正确。
左侧的球体是我所期望的,我使用glMultMatrixd()在右侧生成结果。我做错了什么?
void Display(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glDisable(GL_LIGHTING);
glDisable(GL_TEXTURE_2D);
glPushMatrix();
GLdouble translate[16] = {1,0,0,1,0,1,0,0,0,0,1,0,0,0,0,1};
glMultMatrixd(translate);
DrawSphere();
glPopMatrix();
glPushMatrix();
glTranslatef(1,0,0);
DrawSphere();
glPopMatrix();
glutSwapBuffers();
}
void Reshape(int width, int height) {
tbReshape(width, height);
glViewport(0, 0, width, height);
glGetIntegerv(GL_VIEWPORT, viewport);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(60.0, (GLdouble)width/height, 0.01, 100);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(0.0, 0.0, -5, // eye
0.0, 0.0, 0.0, // center
0.0, 1.0, 0.0); // up
}
答案 0 :(得分:1)
GLdouble translate[16] = {1,0,0,1,0,1,0,0,0,0,1,0,0,0,0,1};
与
相同 glTranslated(1, 0, 0)
表示将本地坐标系转换为(1,0,0)
结果在右侧。
没有错,你只是不明白'矩阵算法'
建议在使用矩阵之前学习线性代数。
------------编辑--------------
抱歉,我的错。GLdouble translate[16] = {1,0,0,0,0,1,0,0,0,0,1,0,1,0,0,1};
是正确的矩阵。
opengl的矩阵是列主要的,所以:
GLdouble m[16]
布局为
m[0] m[4] m[8] m[12]
m[1] m[5] m[9] m[13]
m[2] m[6] m[10] m[14]
m[3] m[7] m[11] m[15]