使用glLoadMatrixf和我自己的矩阵

Ist*_*nra 2 c++ opengl matrix

我有一个简单的绘图循环,我操纵相机,使用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);
}
Run Code Online (Sandbox Code Playgroud)

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 };
Run Code Online (Sandbox Code Playgroud)

这与预期的模型10.0f相去甚远,但是当我使用glLoadMatrix时我放松了对摄像机的控制,视图在初始状态下被修复.当我使用glTranslate移动对象时,这不会发生,一切正常,相机仍会环顾四周.根据我的理解,glLoadMatrix调用应仅应用于堆栈中的顶部矩阵,因此它不应影响相机矩阵.

有任何想法吗?:(

谢谢您的帮助

ybu*_*ill 7

glLoadMatrix将矩阵分配到堆栈顶部.你想要做的是你的矩阵与堆栈顶部的矩阵相乘.使用glMultMatrix了点.