OPENGL und glViewport



  • Hi!

    Hab nur eine kurze Frage zu Opengl und 2d und glviewport.

    und zwar:

    Setze die Matrix wie in einigen Tutorials beschrieben mit:

    ...	
    glMatrixMode( GL_PROJECTION );
    glLoadIdentity();
    
    glOrtho( 0, gameWidth, gameHight, 0, -1, 1 );
    
    glMatrixMode( GL_MODELVIEW );
    glLoadIdentity();
    

    Will nun eine Steuerung fürs 2D Spiel machen mit a,w,s und d.

    Sobalt man diese Drückt ändern sich die float Variablen camX und camY.

    Nun ändere ich den glViewport bei jedem Frame:

    main loop....
    
    glClear(GL_COLOR_BUFFER_BIT);
    
    glViewport(gameWidth, gameHight, camX, camY);
    
    glBegin(GL_QUADS);...
    

    Mein Problem ist jetzt aber das sich zwar der glViewport ändert, wenn ich w, a, s oder d drücke ABER das was außerhalb des "Normalen Viewports" liegt, nur schwarz ist, sprich: all das was ich zuerst nicht sehe und dann sehen sollte, ist schwarz.

    Wie setze ich den glViewport also so ein, dass das was man sehen sollte, auch sieht.



  • Du hast offenbar etwas ganz grundlegend falsch verstanden. Der Viewport tut nicht, was du denkst, dass er tut. Das, was du vermutlich machen willst, kannst du z.B. mit der ModelView Matrix erreichen...



  • OHH..

    Könntest du mir bitte ein Kurzes Beispiel zeigen, wie ich die Kamera Position mit den Variablen camX und camY verändere?



  • Um das vielleicht noch etwas klarer zu machen: Der Viewport definiert den Ausschnitt deines Rendertarget, in den gerendert werden soll. Also im Prinzip den Bereich des Fensters auf den gemalt werden soll.

    Um deine "Kamera" zu verschieben, verschiebst du die Welt in die entgegengesetzte Richtung:

    glMatrixMode( GL_PROJECTION );
    glLoadIdentity();
    
    glOrtho( 0, gameWidth, gameHight, 0, -1, 1 );
    
    glMatrixMode( GL_MODELVIEW );
    glLoadIdentity();
    glTranslate(-camx, -camz, 0.0f);
    


  • glViewport rufst du nur auf wenn sich z.B. deine Fenstergröße geändert hat.


Anmelden zum Antworten