2013-04-18 207 views
-1

固定:我正在嘗試使用OpenGLC++中創建基本遊戲。我可以製作一個帶有方形的窗戶,並讓廣場四處移動。但是,我無法使窗口成爲正確的大小。在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

哎呀謝謝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(); 
} 

這裏的關鍵,您的問題是,設置視口,投影和模型視圖在繪製代碼權當你需要它,你需要什麼是。