为什么绘制的模型不在屏幕中心

时间:2014-08-03 10:12:32

标签: c++ opengl translate-animation

我正在加载Obj model并试图像这样绘制它:

void Game::Update()
{
    glViewport(0, 0, 800, 600);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glClearColor(Color::CornflowerBlue.R, Color::CornflowerBlue.G, Color::CornflowerBlue.B, Color::CornflowerBlue.A);
    gluPerspective(45.0, 800.0 / 600.0, 1.0, 1000.0);



    DrawModel(model);
}

void DrawModel(const Model &model)
{
    for (size_t i = 0; i < model.Faces.size(); i++)
    {
        if (model.Materials.size() > 0)
        {
            float diffuse[] = { model.Materials[model.Faces[i].Material].Diffuse[0], model.Materials[model.Faces[i].Material].Diffuse[1], model.Materials[model.Faces[i].Material].Diffuse[2], 1.0 };
            float ambient[] = { model.Materials[model.Faces[i].Material].Ambient[0], model.Materials[model.Faces[i].Material].Ambient[1], model.Materials[model.Faces[i].Material].Ambient[2], 1.0 };
            float specular[] = { model.Materials[model.Faces[i].Material].Specular[0], model.Materials[model.Faces[i].Material].Specular[1], model.Materials[model.Faces[i].Material].Specular[2], 1.0 };
            glMaterialfv(GL_FRONT, GL_DIFFUSE, diffuse);
            glMaterialfv(GL_FRONT, GL_AMBIENT, ambient);
            glMaterialfv(GL_FRONT, GL_SPECULAR, specular);
            glMaterialf(GL_FRONT, GL_SHININESS, model.Materials[model.Faces[i].Material].Ns);
            glColor3f(diffuse[0], diffuse[1], diffuse[2]);
        }

        int loop = 3;
        if (model.Faces[i].IsQuad){
            loop = 4;
            glBegin(GL_QUADS);
        }
        else
            glBegin(GL_TRIANGLES);

        if (model.NormalVertices.size() > 0)
            glNormal3f(model.NormalVertices.at(model.Faces[i].Index).X, model.NormalVertices.at(model.Faces[i].Index).Y, model.NormalVertices.at(model.Faces[i].Index).Z);
        for (int j = 0; j < loop; j++)
        {
            //TODO TEXTURE:
            if (model.Vertices.size() > 0)
                glVertex3f(model.Vertices[model.Faces[i].VerticesIndex[j]].X, model.Vertices[model.Faces[i].VerticesIndex[j]].Y, model.Vertices[model.Faces[i].VerticesIndex[j]].Z);
        }

        glEnd();
    }
}

但是我无法看到它,因为它没有在屏幕中居中,我知道我可以translate它的坐标,但是我想让它显示模型在中心没有翻译怎么可能?

1 个答案:

答案 0 :(得分:2)

尝试gluLookAt()放置&#34;相机&#34;并告诉它在哪里看。

您总是翻译模型以使其在屏幕上可见,因为只有在单位立方体中渲染的几何图形才会被绘制到屏幕上。使用gluLookAt()和gluPerspective()仅生成拟合矩阵,以将定义的平截头体中的几何体转换为单位立方体。

好像你正在学习OpenGL。如果是这种情况,我建议不要使用glBegin(GL_TRIANGLES)等学习旧的(&lt; 3.0)方法,而是立即学习新的(&gt; = 3.0)OpenGL版本,使用VertexArrayObjects等。首先,我可以推荐这个网站:OpenGL Tutorials