我在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();
}
答案 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()