【问题标题】:Using glLoadMatrixf with my own matrix将 glLoadMatrixf 与我自己的矩阵一起使用
【发布时间】: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 调用应仅应用于堆栈中的顶部矩阵,因此它不应影响相机矩阵。

有什么想法吗? :(

感谢您的帮助

【问题讨论】:

    标签: c++ opengl matrix


    【解决方案1】:

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

    【讨论】:

    • 谢谢:D,这就是问题所在,我假设通过分配到堆栈的顶部,它会覆盖您刚刚推送的矩阵,并且会自动应用它的转换。只要堆栈溢出允许我,我就会把它作为答案:)
    猜你喜欢
    • 2011-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-01
    • 2012-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多