修正:我正在尝试使用C++在OpenGL中制作基本游戏。我可以在其中制作一个带有正方形的窗口,并让正方形移动。但是,我无法让窗口大小正确。
如果我尝试将窗口设置为800 x 600,则窗口和边框将是此大小,而不仅仅是边框内的位。有没有办法让它能够使边界内的位是我定义的尺寸?
我将代码粘贴到http://pastebin.com/jxd5YhHa。
答案 0 :(得分:0)
浏览代码后,我看到了很多典型的新手错误 - 这次是低级别的Win32 API风格。
首先:帮自己一个忙,请不要使用裸Win32 API。有这么多漂亮的OpenGL框架,它们还有一个额外的好处,就是让你的程序免费交叉平台。在您的情况下,我建议使用http://www.libsdl.org
提供的SDL现在你的程序存在的主要问题是它散布了一些重要的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();
}
您的问题的关键在于,当您需要它时,可以在绘图代码中设置视口,投影和模型视图。