【发布时间】:2011-07-23 09:06:26
【问题描述】:
我有一个简单的绘图循环,在其中我使用 glRotatef 和 glTranslatef 操作相机,然后我尝试用我自己的矩阵而不是使用 gl* 命令绘制一个对象
例如
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);
}
矩阵来自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 调用应仅应用于堆栈中的顶部矩阵,因此它不应影响相机矩阵。
有什么想法吗? :(
感谢您的帮助
【问题讨论】: