我又回来了,大概是一个小问题,我在进行OpenGL / SDL冒险时似乎无法解决。

该程序显示了一个640x480px SDL屏幕,但是里面什么也没有,甚至没有背景,它对后面的屏幕都是透明的,我必须承认,我不确定为什么这可能是另一个愚蠢的错误。

#include <SDL/SDL.h>
#include <SDL/SDL_opengl.h>

SDL_Event event;

int main (int argc, char **argv)

{

bool quit = false;

init();
draw_square(0,0,0);

while (quit == false)

    {

        if( event.type == SDL_QUIT )

            {

                quit = true;

            }

    }

SDL_Quit();

return 0;

}

void init ()

{

SDL_Init(SDL_INIT_EVERYTHING);
SDL_SetVideoMode(640,480,32,SDL_OPENGL);
SDL_WM_SetCaption( "OpenGL Test", NULL );

glClearColor( 0, 0, 0, 0 );
glMatrixMode( GL_PROJECTION );
glLoadIdentity();
glOrtho( 0, 0 , 640 , 480, 0, 1 );
glMatrixMode( GL_MODELVIEW );
glLoadIdentity();

}

void draw_square (int x, int y, int z)

{

glTranslatef(x,y,z);

glColor4f(1.0,1.0,1.0,1.0);

glBegin(GL_QUADS);

    glVertex3f(0, 0 ,0);
    glVertex3f(50,0 ,0);
    glVertex3f(50,50,0);
    glVertex3f(0, 50,0);

glEnd();

glPushMatrix();

}

非常感谢〜Michael

最佳答案

即使设置了清晰的颜色,您也不会清除屏幕。您需要像glClear(GL_COLOR_BUFFER_BIT)这样的调用;实际进行清理。

另外,如果您要进行静态绘图以外的其他操作,则最好在循环内连续渲染...可能根本看不到任何东西,因为它希望您考虑到这一点进行双缓冲绘图,并且需要您交换缓冲区以在屏幕上查看结果。通常,在所有绘制调用完成后,每次循环都会完成此操作。我相信您可以使用SDL_GL_SwapBuffers做到这一点

关于c++ - C++ OpenGL SDL屏幕问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7693781/

10-10 18:23
查看更多