【发布时间】:2010-12-18 20:33:08
【问题描述】:
大家好,我是 OpenGL 的新手(今天才开始认真地使用它进行编程),我正在尝试使用它来增强我的 SDL 游戏的 3D 效果。我在下面设置了一个小测试程序:
#include <SDL/SDL.h>
#include <gl/gl.h>
int main(int argc, char *argv[])
{
SDL_Event event;
float theta = 0.0f;
SDL_Init(SDL_INIT_VIDEO);
SDL_Surface *screen = SDL_SetVideoMode(800, 600, 32, SDL_OPENGL | SDL_HWSURFACE | SDL_RESIZABLE | SDL_FULLSCREEN);
glViewport(0, 0, 800, 600);
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
glClearDepth(1.0);
glDepthFunc(GL_LESS);
glEnable(GL_DEPTH_TEST);
glShadeModel(GL_SMOOTH);
glMatrixMode(GL_PROJECTION);
glMatrixMode(GL_MODELVIEW);
int done;
for(done = 0; !done;)
{
SDL_FillRect(screen, 0, SDL_MapRGB(screen->format, 255, 0, 0));
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glTranslatef(0.0f,0.0f,0.0f);
glRotatef(theta, 0.0f, 0.0f, 1.0f);
glBegin(GL_TRIANGLES);
glColor3f(0.83f, 0.83f, 0.0f);
glVertex2f(0.0f, 1.0f);
glColor3f(0.83f, 0.83f, 0.0f);
glVertex2f(0.87f, -0.5f);
glColor3f(0.83f, 0.83f, 0.0f);
glVertex2f(-0.87f, -0.5f);
glEnd();
theta += 10.0f;
SDL_Flip(screen);
SDL_GL_SwapBuffers();
SDL_PollEvent(&event);
if(event.key.keysym.sym == SDLK_ESCAPE)
done = 1;
}
}
我的问题是我尝试渲染的红色背景从未渲染,只渲染了 OpenGL 三角形。
提前感谢任何可以帮助我的人。非常感谢。
【问题讨论】:
-
我建议只使用opengl,不要同时使用。
-
反应很差。 SDL 有一个很棒的输入和声音框架,而 OpenGL 没有。如果我能弄清楚如何让 SDL 的渲染与 OpenGL 一起工作,而不是只使用 OpenGL 进行渲染,它将大大加快开发速度。
-
我的意思是只使用 opengl 进行绘图。反正效率会更高。