2013-04-18 169 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(); 
} 

这里的关键,您的问题是,设置视口,投影和模型视图在绘制代码权当你需要它,你需要什么是。