shawind 发表于 2007-3-13 17:05:18

[分享]SDL+OPENGL(tips)

在SDL中创建能使用OpengGl的Surface,首先要使用SDL_GL_SetAttribute设置好SDL_GLattr

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

程序流程大体上就是这样,感觉还是挺容易用的。

Miliardo 发表于 2007-3-13 18:52:01

顶一个……
话说这个似乎SDL手册里面有一节专门讲这个?

shawind 发表于 2007-3-13 20:05:56

这些代码就是sdl的官方例子里面的。
我把它挑出来,把主要流程又抄了一遍,便于理解和记忆。
方便以后复查,免得自己又忘记了。
(前段时间还看了dx9的来着,现在已全忘光了 )

shawind 发表于 2007-3-15 00:42:08


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();    // 绘制结束

shawind 发表于 2007-3-26 18:22:38

导入BMP做opengl纹理的时候
BMP格式中的RGB顺序和一般的图形格式相反。
在glTexImage2D()函数中,BMP用GL_BGR,jpg等图形格式用GL_RGB。
页: [1]
查看完整版本: [分享]SDL+OPENGL(tips)