在OpenGL中设置窗口的大小

时间:2013-04-18 18:35:30

标签: c++ opengl

修正:我正在尝试使用C++OpenGL中制作基本游戏。我可以在其中制作一个带有正方形的窗口,并让正方形移动。但是,我无法让窗口大小正确。

如果我尝试将窗口设置为800 x 600,则窗口和边框将是此大小,而不仅仅是边框内的位。有没有办法让它能够使边界内的位是我定义的尺寸?

我将代码粘贴到http://pastebin.com/jxd5YhHa

1 个答案:

答案 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();
}

您的问题的关键在于,当您需要它时,可以在绘图代码中设置视口,投影和模型视图