-1
固定:我正在嘗試使用OpenGL在C++中創建基本遊戲。我可以製作一個帶有方形的窗戶,並讓廣場四處移動。但是,我無法使窗口成爲正確的大小。在OpenGL中設置窗口的大小
如果我嘗試使窗口爲800乘600,那麼窗口和邊框將是這個尺寸,而不僅僅是邊框內的位。有沒有一種方法可以使邊界內的位是我定義的尺寸?
我粘貼了代碼http://pastebin.com/jxd5YhHa。
固定:我正在嘗試使用OpenGL在C++中創建基本遊戲。我可以製作一個帶有方形的窗戶,並讓廣場四處移動。但是,我無法使窗口成爲正確的大小。在OpenGL中設置窗口的大小
如果我嘗試使窗口爲800乘600,那麼窗口和邊框將是這個尺寸,而不僅僅是邊框內的位。有沒有一種方法可以使邊界內的位是我定義的尺寸?
我粘貼了代碼http://pastebin.com/jxd5YhHa。
在瀏覽完代碼後,我看到很多典型的新手錯誤 - 這次是低級別的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();
}
這裏的關鍵,您的問題是,設置視口,投影和模型視圖在繪製代碼權當你需要它,你需要什麼是。
可以使用GetSystemMetrics(http://msdn.microsoft.com/en-us/library/windows/desktop/ms724385%28v=vs.85%29.aspx)獲取窗口不同部分的大小取決於你使用的風格。然後將其添加到您的目標客戶端大小(800x600)以獲得您的窗口大小。 – IronMensan
它看起來像你留下一個思想未完成? 「我有什麼辦法可以做到這一點......」 – Gaffi
哎呀謝謝justed編輯它 – user2296321