现在我正在旋转一个对象,我们称它为“mainBody”,但连接到 mainBody 的是几个附件,当我旋转我的 mainBody 时,它们也应该旋转,但现在它们没有。我没有使用父/子系统。主体有一个附件数组,并在 mainBody 绘制函数中绘制它们。
主体中的 glPopMatrix() 是在绘制设备项目后完成的。
我知道我过去用 pushMatrix(); 设法做到了这一点。和弹出矩阵();但现在它似乎不起作用。
我正在使用 c++、opengl 和 glm。
这是一些代码,向您展示了我现在拥有的内容:
{
    setupStartModelMatrix(); //<---- Has glPushMatrix();
    setupModelviewMatrix();  //<--- has all the gml stuff
    drawMainBody();
    }
    if(mNumberOfEquipementOwned != 0)
    {
        for(int i = 0; i < mNumberOfEquipementOwned; i++)
        {
            //obj is retrieved with a function 
            obj->render();
        }
    }
    setupEndModelMatrix();  // <--- Has glPopMatrix(); 
}
和 glm 代码
void GameObject::setupModelviewMatrix()
{
    glm::mat4 Projection = glm::perspective(45.0f, 4.0f / 3.0f, 0.1f, 100.f);
    glm::mat4 Model = glm::scale( glm::mat4(1.0f), glm::vec3(1.0f)); 
    glm::mat4 ViewTranslate = glm::translate( glm::mat4(1.0f), glm::vec3(mPosition.x, mPosition.y, mPosition.z)); 
    glm::mat4 ViewRotateX = glm::rotate( ViewTranslate, mRotation.x, glm::vec3(1.0f, 0.0f, 0.0f));
    glm::mat4 ViewRotateY = glm::rotate( ViewRotateX, mRotation.y, glm::vec3(0.0f, 1.0f, 0.0f));
    glm::mat4 View = glm::rotate( ViewRotateY, mRotation.z, glm::vec3(0.0f, 0.0f, 1.0f)); 
    glm::mat4 MVP = View * Model;
    glUniformMatrix4fv( 0, 1, GL_FALSE, glm::value_ptr(MVP)); 
    glLoadMatrixf(glm::value_ptr(MVP));
}
以及绘制设备代码
void Gun::render()
{
    glPushMatrix();
    setupModelviewMatrix();
    mMesh->render();
    glPopMatrix();
}