视口内的OpenGL视口

时间:2015-01-06 10:56:26

标签: c++ opengl viewport

我在opengl中创建了一个迷宫,我正在尝试创建一个小地图。为此,我想到在视口内创建一个视口。我有三种方法,一种用于创建墙壁,另一种用于地板,另一种用于小地图。墙和地板进入主视口,第二个视口进入迷你地图。我正在使用显示列表来创建墙壁和地板。我可以创建两个视口,但我的问题是我不知道在哪里调用创建小地图的方法。

我不知道它是否会有任何帮助,但这是我的显示列表方法:

void createDisplayLists(int janelaID)
{
//Creates the walls
modelo.labirinto[janelaID] = glGenLists(2);
glNewList(modelo.labirinto[janelaID], GL_COMPILE);
glPushAttrib(GL_COLOR_BUFFER_BIT | GL_CURRENT_BIT | GL_ENABLE_BIT);
desenhaLabirinto();
glPopAttrib();
glEndList();

//Creates the floor
modelo.chao[janelaID] = modelo.labirinto[janelaID] + 1;
glNewList(modelo.chao[janelaID], GL_COMPILE);
glPushAttrib(GL_COLOR_BUFFER_BIT | GL_CURRENT_BIT | GL_ENABLE_BIT);
desenhaChao(CHAO_DIMENSAO, modelo.texID[janelaID][ID_TEXTURA_CHAO]);
glPopAttrib();
glEndList();
}

1 个答案:

答案 0 :(得分:1)

OpenGL不是场景图,它是基于状态的绘图API。在你打电话的那一刻,事情会变成像素(实际上,事情会被批量处理并异步执行,但这对案件来说并不重要。)

所以它的要点是:

draw_stuff_into_viewport_A():
    glViewport(viewport_A)
    setup_projection(project_A)
    draw_A_stuff()

draw_stuff_into_viewport_B():
    glViewport(viewport_B)
    setup_projection(project_B)
    draw_B_stuff()

display():
    glClear(...)

    draw_stuff_into_viewport_A()
    draw_stuff_into_viewport_B()

    swapBuffers()