ich habe jetzt seit langem wieder angefangen, etwas grafisches zu programmieren. Das hat u.a. auch den Grund, dass ich für mein Studium nen einfachen Raytracer programmieren muss. Dazu nehme ich SDL und für die Anzeige OpenGL (okay, würde bei nem einfachen Raytracer ja auch direkt mit SDL funktionieren, hab mich aber trotzdem für OGL entschieden).
Mit SDL und OGL hab ich bisher relativ wenig gemacht, daher hab ich mir bei http://nehe.gamedev.net/ die Tutorials mal angeschaut. Ich hab den Linux/SDL-Quellcode vom 2. Kapitel genommen, in dem nichts weiter gemacht wird, als per SDL da OGL-Surface zu erstellen und dann ein Dreieck und ein Quadrat zu zeichnen. Soweit so gut, läuft ganz gut. Allerdings hab ich folgendes Problem: wenn ich in der Hauptschleife ein sleep(1) einbaue, dann blitzen die beiden Objekte nur kurz auf und verschwinden dann sofort wieder, wie wenn der Color-Buffer sofort wieder geleert werden würde. Das selbe gilt auch, wenn ich das sleep nicht einbaue, nur dann sind die Objekte im Verhältnis länger da. Da bei dem ganzen der Doublebuffer eingeschaltet ist, sollte das meiner Meinung nach ja auch während dem sleep angezeigt bleiben, oder habe ich da jetzt einen Denkfehler?!
Also nochmal eine kurze Zusammenfassung des Codes:
Code: Alles auswählen
main() {
SDL_Init(SDL_INIT_VIDEO);
videoflags = SDL_OPENGL | SDL_GL_DOUBLEBUFFER |SDL_HWPALETTE | SDL_HWSURFACE | SDL_HWACCEL ;
SDL_SetVideoMode();
initGL();
resizeWindow();
while(!done) {
while(SDL_PollEvent()) {}
drawGLScene();
sleep(1);
}
initGL() {
glShadeModel(GL_SMOOTH);
glClearColor(0,0,0,0);
glHint(GL_PERSPECTIVE_CORRECTION_HINT,GL_NICEST);
}
resizeWindow(width,height) {
glViewport();
glMatrixMode(GL_PROJECTION);
glLoadIdentitiy();
gluPerspective();
glMatrixMode(GL_MODELVIEW);
glLoadIdentitiy();
}
drawGLScene() {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glBegin(GL_TRIANGLES);
glVertex3f();
glVertex3f();
glVertex3f();
glEnd();
SDL_GL_SwapBuffers();
}
Ich hoffe mal, dass hier jemand (m)ein (Denk-)Fehler findet und mir helfen kann.
Danke und Grüße
hundvdf