已修复:我正在尝试使用OpenGL在C++中创建一个基本游戏。我可以制作一个带有正方形的窗口,然后让正方形四处移动。但是,我无法让窗口的大小正确。
如果我尝试将窗口设置为 800 x 600,那么窗口和边框将是这个大小,而不仅仅是边框内的位。有没有办法让边界内的位是我定义的大小?
我将代码粘贴在http://pastebin.com/jxd5YhHa中。
已修复:我正在尝试使用OpenGL在C++中创建一个基本游戏。我可以制作一个带有正方形的窗口,然后让正方形四处移动。但是,我无法让窗口的大小正确。
如果我尝试将窗口设置为 800 x 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();
}
您的问题的关键是,在您需要时在绘图代码中设置视口、投影和模型视图。