-1

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

如果我尝试将窗口设置为 800 x 600,那么窗口和边框将是这个大小,而不仅仅是边框内的位。有没有办法让边界内的位是我定义的大小?

我将代码粘贴在http://pastebin.com/jxd5YhHa中。

4

1 回答 1

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

您的问题的关键是,在您需要时在绘图代码中设置视口、投影和模型视图。

于 2013-04-18T22:38:23.047 回答