2013-04-18 4 views
-1

Исправлено: Я пытаюсь создать базовую игру в C++ с помощью OpenGL. Я могу сделать окно с квадратом в нем и сделать квадрат. Тем не менее, у меня возникают проблемы с тем, чтобы окно было правильным.Установка размера окна в OpenGL

Если я попытаюсь сделать окно размером 800 на 600, тогда окно и границы будут такого размера, а не только бит внутри границы. Есть ли способ сделать это так, чтобы бит внутри границы был размером, который я определяю?

Я вставил код в http://pastebin.com/jxd5YhHa.

+0

Вы можете использовать GetSystemMetrics (http://msdn.microsoft.com/en-us/library/windows/desktop/ms724385%28v=vs.85%29.aspx), чтобы получить размер разных частей окна в зависимости от стиля, который вы используете. Затем добавьте это к размеру вашего целевого клиента (800x600), чтобы получить размер вашего окна. – IronMensan

+0

Похоже, что вы оставили мысль незавершенной? «Есть ли способ сделать это так, чтобы ...»? – Gaffi

+0

oops thanks justed отредактировал его – user2296321

ответ

0

После смены кода вы видели много типичных ошибок новичка - на этот раз низкий уровень Win32 API-стиля.

Прежде всего: сделайте себе одолжение и, пожалуйста, не используйте голый Win32 API. Существует так много хороших фреймворков OpenGL, которые имеют дополнительное преимущество для бесплатной конвертации вашей программы. В вашем случае я бы рекомендовал SDL, доступный от http://www.libsdl.org

Теперь основная проблема с вашей программой заключается в том, что она разбросала некоторые жизненно важные операции OpenGL по всему месту. Самое главное - настроить видовые экраны и матрицы. Ваши функции рисования всегда должны следовать следующей схеме

void draw(…) 
{ 
    glDisable(GL_SCISSOR_TEST); 

    glClearColor(…); 
    glClearDepth(…); 
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); 

    for(subview in views) { 
     glViewport(…); 
    #ifdef USE_FIXED_FUNCTION_PIPELINE 
     glMatrixMode(GL_PROJECTION); 
     glLoadIdentity(); 
     projection_setup(); 

     for(model in scene) {   
      glMatrixMode(GL_MODELVIEW); 
      glLoadIdentity(); 
      modelview_setup(); 
     #else 
      glUseProgram(…); 
      setup_uniforms(); 
     #endif 
      draw_stuff(); 
     } 
    } 

    SwapBuffers(); 
} 

Ключа здесь, чтобы ваша проблема, установить окно просмотр, проекцию и видовая в коде рисования прав, когда вам это нужно, что вам это нужно, чтобы быть.

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