[分享]SDL+OPENGL(tips)
在SDL中创建能使用OpengGl的Surface,首先要使用SDL_GL_SetAttribute设置好SDL_GLattrSDL_Init(SDL_INIT_VIDEO);
SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 8);
SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 8);
SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 8);
SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 16);
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
SDL_SetVideoMode(640, 480, 32, SDL_OPENGL);
创建出来的是一个640*480大小,32位色,16位深度缓存,双缓存的Surface。
这里的SDL_SetVideoMode不能用SDL_DOUBLEBUF来设双缓存,得用SDL_GL_DOUBLEBUFFER才行。
接着调用opengl的函数,随便在屏幕中间画一个三角形
glBegin(GL_TRIANGLES);
glColor4f(1, 0, 0, 1); glVertex3f(0, 0.5, 0);
glColor4f(0, 1, 0, 1); glVertex3f(-0.5, -0.5, 0);
glColor4f(0, 0, 1, 1); glVertex3f(0.5, 0.5, 0);
glEnd();
把这个三角形显示
SDL_GL_SwapBuffers();
程序流程大体上就是这样,感觉还是挺容易用的。 顶一个……
话说这个似乎SDL手册里面有一节专门讲这个? 这些代码就是sdl的官方例子里面的。
我把它挑出来,把主要流程又抄了一遍,便于理解和记忆。
方便以后复查,免得自己又忘记了。
(前段时间还看了dx9的来着,现在已全忘光了 )
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // 清除屏幕及深度缓存
glLoadIdentity(); //当前点重置到到屏幕中心
glTranslatef(-1.5f,0.0f,-6.0f); // 当前点左移 1.5 单位,并移入屏幕 6.0单位
glBegin(GL_TRIANGLES);// 在当前点的位置绘制三角形
glVertex3f( 0.0f, 1.0f, 0.0f); // 上
glVertex3f(-1.0f,-1.0f, 0.0f); // 左下
glVertex3f( 1.0f,-1.0f, 0.0f); // 右下
glEnd(); // 绘制结束
导入BMP做opengl纹理的时候
BMP格式中的RGB顺序和一般的图形格式相反。
在glTexImage2D()函数中,BMP用GL_BGR,jpg等图形格式用GL_RGB。
页:
[1]