2015-01-06 3 views
0

Я создаю лабиринт в opengl, и я пытаюсь создать мини-карту. Для этого я подумал о создании окна просмотра внутри окна просмотра. У меня есть три метода: один для создания стен, другой для пола и другой для мини-карты. Стены и пол идут в главном окне просмотра, а мини-карта - во втором окне просмотра. Я использую Display Lists, чтобы создать стены и пол. Я могу создать оба видовых экрана, но моя проблема заключается в том, что я не знаю, где вызвать метод для создания мини-карты.OpenGL Viewport внутри видового экрана

Я не знаю, будет ли это какой-либо помощи, но вот мой список отображения метод:

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

Я новичок, когда дело доходит до OpenGL:/Является ли это можно лучше объяснить? –

ответ

0

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() 
+0

Я изменил свой вопрос, потому что мне удалось создать оба видовых экрана, но у меня все еще есть проблемы с тем, как использовать видовое окно внутри окна просмотра. –

+0

@AdamSilva: Не думайте об этом как о «видовом экране» внутри окна просмотра. Это первый рисунок для одного окна просмотра, а затем вы рисуете в другой, перечеркивая все, что лежит под ним. Вероятно, вам придется объединить его с тестом scissor ('glEnable (GL_SCISSOR_TEST);' и вызовом 'glScissor' с параметрами, идентичными окну просмотра), чтобы сначала очистить область области просмотра мини-карты. Но в основном вы перегружаете часть своей существующей картины. – datenwolf

Смежные вопросы