我一直在使用Opengl遇到一些奇怪的行为。我做错了什么,但我无法弄清楚它是什么。
我有HD Graphics 3000加速器,我在Ubuntu 14.04上安装了Opengl 3.0。
问题在于,有时候不会画任何东西,特别是在做一个小的翻译时会导致它可见。渲染纹理时,我会遇到分段错误。
以下是代码的重要部分:
启动SDL,创建opengl上下文等
if (SDL_Init(SDL_INIT_VIDEO) < 0) {
exit(1);
}
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 0);
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 24);
mainwindow = SDL_CreateWindow("", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED,
512, 512, SDL_WINDOW_OPENGL | SDL_WINDOW_SHOWN);
maincontext = SDL_GL_CreateContext(mainwindow);
glewInit();;
SDL_GL_SetSwapInterval(1);
启动opengl:
glClearColor(0.0,0.0,0.0,1.0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(45,(double)width/(double)height,1,100.0);
glMatrixMode(GL_MODELVIEW);
glEnable(GL_DEPTH_TEST);
glEnable(GL_LIGHTING); //we enable lighting, to make the 3D object to 3D
glEnable(GL_LIGHT0);
glEnable(GL_TEXTURE_2D);
float col[]= {1.0,1.0,1.0,1.0}; //light color is white
glLightfv(GL_LIGHT0,GL_DIFFUSE,col);
glEnable(GL_NORMALIZE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
渲染:
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glClearColor ( 0.0, 0.0, 0.0, 1.0 );
glLoadIdentity();
glTranslatef(0,0,-5);
glColor3f(1,0,0);
glBegin(GL_TRIANGLES);
glVertex3f(-1,-1,-5);
glVertex3f(1,-1,-5);
glVertex3f(0,1,-5);
glEnd();
我实际上渲染了一些加载的模型,但是由于某种原因,甚至没有显示这个三角形。如果我渲染模型,在加载纹理时,使用SOIL提供的自动例程将图像加载到opengl时会发生分段错误。
有什么想法吗? 我也检查了opengl中的错误以及启动GLEW时的错误,但是没有。
答案 0 :(得分:0)
好的,问题是我使用Opengl(调用闪电,设置视图等)而不启动SDL并创建上下文。奇怪的是,Opengl没有说出任何错误。