使用glLoadMatrixf和我自己的矩阵

Using glLoadMatrixf with my own matrix

本文关键字:自己的 我自己 glLoadMatrixf 使用      更新时间:2023-10-16

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

有什么想法吗?:(

感谢的帮助

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