我有一个简单的绘图循环,我操纵相机,使用glRotatef和glTranslatef然后我尝试用我自己的矩阵绘制一个对象,而不是使用gl *命令
e.g。
void GLCore::render()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glRotatef(camera.xRot,1.0,0.0,0.0);
glRotatef(camera.yRot,0.0,1.0,0.0);
glTranslatef(-camera.position.X, -camera.position.Y, -camera.position.Z);
glPushMatrix();
drawScene();
glPopMatrix();
camera.updateCamera();
}
void GLCore::drawScene()
{
glEnableClientState(GL_VERTEX_ARRAY);
glPushMatrix();
glLoadMatrixf(mapObject->matrix.getMatrixPointer());
glVertexPointer(....);
glDrawElements(....);
glPopMatrix();
glDisableClientState(GL_VERTEX_ARRAY);
}
Matrix来自mapObject:
float m[] = { 1.0f, 0.0f, 0.0f, 0.0f,
0.0f, 1.0f, 0.0f, 0.0f,
0.0f, 0.0f, 1.0f, 0.0f,
0.0f, 0.0f, -10.0f, 1.0f };
这就像预期的那样,模型10.0f离开了,但是当我使用glLoadMatrix时我放松了对摄像机的控制,视图被固定在初始状态。当我使用glTranslate移动对象时,这不会发生,一切正常,相机仍会环顾四周。根据我的理解,glLoadMatrix调用应仅应用于堆栈中的顶部矩阵,因此它不应影响相机矩阵。
有什么想法吗? :(
感谢您的帮助
答案 0 :(得分:7)
glLoadMatrix
将您的矩阵分配到堆栈顶部。你想要做的是将矩阵与矩阵顶部的矩阵相乘。请使用glMultMatrix
。