使用glLoadMatrixf和我自己的矩阵

时间:2011-07-23 09:06:27

标签: c++ opengl matrix

我有一个简单的绘图循环,我操纵相机,使用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调用应仅应用于堆栈中的顶部矩阵,因此它不应影响相机矩阵。

有什么想法吗? :(

感谢您的帮助

1 个答案:

答案 0 :(得分:7)

glLoadMatrix将您的矩阵分配到堆栈顶部。你想要做的是将矩阵与矩阵顶部的矩阵相乘。请使用glMultMatrix