我又回来了,大概是一个小问题,我在进行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/