-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