Einführung OpenGL -> nur weißer Hintergrund



  • Hallo zusammen,

    hab in der Uni gerade eine Einführung in OpenGL.
    Dabei sollen wir folgenden Code kompilieren und schauen was da geschieht, bzw. was da dabei rauskommt.

    Nur leider sehe ich nur ein Graphikfenster mit weißen Hintergrund.
    Wenn ich den Code aber richtig verstehe müsste ich da ein Viereck sehen oder?

    So nun meine Frage. Warum sehe ich das nicht?

    Code:

    void Init()	
    {
    	glClearColor(1, 1, 0, 0);
    	glEnable(GL_DEPTH_TEST);
    	glClearDepth(1.0);
    
       // Hier finden jene Aktionen statt, die zum Programmstart einmalig 
       // durchgeführt werden müssen
    }
    
    void RenderScene() //Zeichenfunktion
    {
    
    	// Hier befindet sich der Code der in jedem Frame ausgefuehrt werden muss
    	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    	glLoadIdentity();   // Aktuelle Model-/View-Transformations-Matrix zuruecksetzen
    	glBegin(GL_POLYGON);
    	glColor4f(1.0, 0.0, 0.0, 1.0);
    	glVertex3f(-0.5, -0.5, -0.5);
    	glColor4f(0.0, 0.0, 1.0, 1.0);
    	glVertex3f(0.5, -0.5, -0.5);
    	glColor4f(0.0, 0.0, 1.0, 1.0);
    	glVertex3f(0.5, 0.5, -0.5);
    	glColor4f(0.0, 0.0, 1.0, 1.0);
    	glVertex3f(-0.5, 0.5, -0.5);
    	glEnd();
    
       glFlush(); //Buffer leeren
    
    }
    
    void Reshape(int width,int height)
    {
       // Hier finden die Reaktionen auf eine Veränderung der Größe des 
       // Graphikfensters statt
    	// Matrix für Transformation: Frustum->viewport 
    	glMatrixMode(GL_PROJECTION);
    	// Aktuelle Transformations-Matrix zuruecksetzen 
    	glLoadIdentity();
    	// Viewport definieren  
    	glViewport(0, 0, width, height);
    	// Frustum definieren (siehe unten) 
    	glOrtho(-1., 1., -1., 1., 0.3, 1.3);
    	// Matrix für Modellierung/Viewing 
    	glMatrixMode(GL_MODELVIEW);
    }
    
    void Animate (int value)    
    {
       // Hier werden Berechnungen durchgeführt, die zu einer Animation der Szene  
       // erforderlich sind. Dieser Prozess läuft im Hintergrund und wird alle 
       // 1000 msec aufgerufen. Der Parameter "value" wird einfach nur um eins 
       // inkrementiert und dem Callback wieder uebergeben. 
       std::cout << "value=" << value << std::endl;
       // RenderScene aufrufen
       glutPostRedisplay();
       // Timer wieder registrieren; Animate wird so nach 100 msec mit value+=1 aufgerufen
       glutTimerFunc(100, Animate, ++value);          
    }
    
    int main(int argc, char **argv)
    {
       glutInit( &argc, argv );                // GLUT initialisieren
       glutInitDisplayMode( GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH );        
       glutInitWindowSize( 600, 600 );         // Fenster-Konfiguration
       glutCreateWindow( "Sebastian Schmitt; Name_2" );   // Fenster-Erzeugung
       glutDisplayFunc(RenderScene);         // Zeichenfunktion bekannt machen
       glutReshapeFunc(Reshape);
       // TimerCallback registrieren; wird nach 10 msec aufgerufen mit Parameter 0  
       glutTimerFunc( 10, Animate, 0);
       Init();
       glutMainLoop();
       return 0;
    }
    


  • So muss anscheindend irgendwie an meiner Konfiguration auf meinem Laptop liegen.
    Auf meinem zweit rechner funzt alles ganz normal.
    Kann sowas an der Grafikkarte liegen?

    Wenn da jemand Idee hat, wäre ich dankbar 😃



  • Was lernt ihr denn da für ein OpenGL? Das ist total veraltet, heute(seit 2008) entwickelt man mit Shadern und Buffern und nicht mehr per glBegin/glEnd. Das ist ja tiefste Steinzeit. Bei OpenGL ES, was auf mobilen Geräten zum Einsatz kommt, gibt es diese Altlasten überhaupt nicht mehr, bei den anderen kannst du zur Not noch in eine Art Kompatibilitätsmodus gehen, wo man die alten Schinken noch anwenden darf.

    OpenGL 3.0 (11. August 2008)

    • Codebasis aufgeräumt
    • OpenGL Shading Language 1.30
    • Entfernen von Altlasten (glBegin / glEnd, Fixed-Function-Pipeline, T&L etc.)


  • UraltGL schrieb:

    Was lernt ihr denn da für ein OpenGL? Das ist total veraltet, ...

    Diese Altlasten funktionieren noch wunderbar! Es geht dabei nicht um OpenGL sondern um Computergrafik nehme ich an.

    @greenBanana Überprüf doch einfach mal überall ob GL Fehler liefert. Mit CHECK_GL();
    (ungetestet)

    #define CHECK_GL() do{GLenum __err=glGetError(); if(__err!=GL_NONE) {std::cout << "Error: " << gluErrorString(__err);}}while(0)
    


  • UraltGL schrieb:

    Was lernt ihr denn da für ein OpenGL? Das ist total veraltet, heute(seit 2008) entwickelt man mit Shadern und Buffern und nicht mehr per glBegin/glEnd. Das ist ja tiefste Steinzeit. Bei OpenGL ES, was auf mobilen Geräten zum Einsatz kommt, gibt es diese Altlasten überhaupt nicht mehr, bei den anderen kannst du zur Not noch in eine Art Kompatibilitätsmodus gehen, wo man die alten Schinken noch anwenden darf.

    OpenGL 3.0 (11. August 2008)

    • Codebasis aufgeräumt
    • OpenGL Shading Language 1.30
    • Entfernen von Altlasten (glBegin / glEnd, Fixed-Function-Pipeline, T&L etc.)

    Wo kann man denn dieses neue OpenGL ohne glBegin/glEnd lernen. Als ich es vor 2 Jahren gebfraucht habe, habe ich es auch so gelernt. Aber bei mir geht es hauptsächlich darum was auf dem Schirm zu bekommen. Simulationen usw.



  • UraltGL schrieb:

    Was lernt ihr denn da für ein OpenGL? Das ist total veraltet, heute(seit 2008) entwickelt man mit Shadern und Buffern und nicht mehr per glBegin/glEnd. Das ist ja tiefste Steinzeit. Bei OpenGL ES, was auf mobilen Geräten zum Einsatz kommt, gibt es diese Altlasten überhaupt nicht mehr, bei den anderen kannst du zur Not noch in eine Art Kompatibilitätsmodus gehen, wo man die alten Schinken noch anwenden darf.

    OpenGL 3.0 (11. August 2008)

    • Codebasis aufgeräumt
    • OpenGL Shading Language 1.30
    • Entfernen von Altlasten (glBegin / glEnd, Fixed-Function-Pipeline, T&L etc.)

    Eine Lochkamera ist einfacher zu verstehen als eine moderne Spiegelreflex.

    Es schadet also nicht alte Systeme zu verstehen zumal das Neue auf dem Alten aufbaut.

    Und ich kann es auch nicht leiden, wenn hier Anfängern Bücher empfohlen werden, die nicht für sie konzipiert sind.

    Lernen braucht einfach Zeit!



  • greenBanana schrieb:

    Hallo zusammen,

    hab in der Uni gerade eine Einführung in OpenGL.
    Dabei sollen wir folgenden Code kompilieren und schauen was da geschieht, bzw. was da dabei rauskommt.

    Nur leider sehe ich nur ein Graphikfenster mit weißen Hintergrund.
    Wenn ich den Code aber richtig verstehe müsste ich da ein Viereck sehen oder?

    So nun meine Frage. Warum sehe ich das nicht?

    Code:

    void Init()	
    {
    	glClearColor(1, 1, 0, 0);
    	glEnable(GL_DEPTH_TEST);
    	glClearDepth(1.0);
    
       // Hier finden jene Aktionen statt, die zum Programmstart einmalig 
       // durchgeführt werden müssen
    }
    
    void RenderScene() //Zeichenfunktion
    {
    	
    	// Hier befindet sich der Code der in jedem Frame ausgefuehrt werden muss
    	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    	glLoadIdentity();   // Aktuelle Model-/View-Transformations-Matrix zuruecksetzen
    	glBegin(GL_POLYGON);
    	glColor4f(1.0, 0.0, 0.0, 1.0);
    	glVertex3f(-0.5, -0.5, -0.5);
    	glColor4f(0.0, 0.0, 1.0, 1.0);
    	glVertex3f(0.5, -0.5, -0.5);
    	glColor4f(0.0, 0.0, 1.0, 1.0);
    	glVertex3f(0.5, 0.5, -0.5);
    	glColor4f(0.0, 0.0, 1.0, 1.0);
    	glVertex3f(-0.5, 0.5, -0.5);
    	glEnd();
    	
       glFlush(); //Buffer leeren
     
       
    
    }
    
    void Reshape(int width,int height)
    {
       // Hier finden die Reaktionen auf eine Veränderung der Größe des 
       // Graphikfensters statt
    	// Matrix für Transformation: Frustum->viewport 
    	glMatrixMode(GL_PROJECTION);
    	// Aktuelle Transformations-Matrix zuruecksetzen 
    	glLoadIdentity();
    	// Viewport definieren  
    	glViewport(0, 0, width, height);
    	// Frustum definieren (siehe unten) 
    	glOrtho(-1., 1., -1., 1., 0.3, 1.3);
    	// Matrix für Modellierung/Viewing 
    	glMatrixMode(GL_MODELVIEW);
    }
    
    void Animate (int value)    
    {
       // Hier werden Berechnungen durchgeführt, die zu einer Animation der Szene  
       // erforderlich sind. Dieser Prozess läuft im Hintergrund und wird alle 
       // 1000 msec aufgerufen. Der Parameter "value" wird einfach nur um eins 
       // inkrementiert und dem Callback wieder uebergeben. 
       std::cout << "value=" << value << std::endl;
       // RenderScene aufrufen
       glutPostRedisplay();
       // Timer wieder registrieren; Animate wird so nach 100 msec mit value+=1 aufgerufen
       glutTimerFunc(100, Animate, ++value);          
    }
    
    int main(int argc, char **argv)
    {
       glutInit( &argc, argv );                // GLUT initialisieren
       glutInitDisplayMode( GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH );        
       glutInitWindowSize( 600, 600 );         // Fenster-Konfiguration
       glutCreateWindow( "Sebastian Schmitt; Name_2" );   // Fenster-Erzeugung
       glutDisplayFunc(RenderScene);         // Zeichenfunktion bekannt machen
       glutReshapeFunc(Reshape);
       // TimerCallback registrieren; wird nach 10 msec aufgerufen mit Parameter 0  
       glutTimerFunc( 10, Animate, 0);
       Init();
       glutMainLoop();
       return 0;
    }
    

    Also ich sehe ihn: Gelber Hintergrund und ein blaurotes Viereck.



  • Namal schrieb:

    UraltGL schrieb:

    Was lernt ihr denn da für ein OpenGL? Das ist total veraltet, heute(seit 2008) entwickelt man mit Shadern und Buffern und nicht mehr per glBegin/glEnd. Das ist ja tiefste Steinzeit. Bei OpenGL ES, was auf mobilen Geräten zum Einsatz kommt, gibt es diese Altlasten überhaupt nicht mehr, bei den anderen kannst du zur Not noch in eine Art Kompatibilitätsmodus gehen, wo man die alten Schinken noch anwenden darf.

    OpenGL 3.0 (11. August 2008)

    • Codebasis aufgeräumt
    • OpenGL Shading Language 1.30
    • Entfernen von Altlasten (glBegin / glEnd, Fixed-Function-Pipeline, T&L etc.)

    Wo kann man denn dieses neue OpenGL ohne glBegin/glEnd lernen. Als ich es vor 2 Jahren gebfraucht habe, habe ich es auch so gelernt. Aber bei mir geht es hauptsächlich darum was auf dem Schirm zu bekommen. Simulationen usw.

    http://arcsynthesis.org/gltut/



  • Scorcher24 schrieb:

    http://arcsynthesis.org/gltut/

    Vielen Dank!


Anmelden zum Antworten