Я создаю лабиринт в 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();
}
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()