[Opengl] 2D: Objekt verzerrt



  • Moin
    Ich hab mir ein OpenGL Tut angeschaut und gleich mal mit dem Quelltext ein paar Sachen versucht.

    Jetzt bin ich soweit, das ich möchte, dass das Koordinatensystem genau die gleiche Größe hat wie das Fenster selber. Nach ein wenig suchen bin ich auf glOrtho gekommen.. nur hab ich diese wohl falsch verwendet.. zwar Funktioniert das gewollte im Grunde, nur ist das Objekt verzerrt und zwar wird das Objekt zusammengedrückt wenn ich das Fenster größer mache und umgekehrt..
    Hier ist die Funktion bei der meines Glaubens nach der Fehler liegt (wenn nicht dort, dann sagt mir welche Funktion ihr braucht)
    :

    GLvoid ReSizeGLScene(GLsizei width, GLsizei height) 
    // Initialisierung des OpenGL-Fensters
    {
      if (height==0)
      {      
        height=1;    
      }
     // height darf nicht 0 sein, damit es im späteren 
     // Programmablauf nicht zu einer Division durch 0 kommt.
    
    //glViewport(0, 0, (GLsizei) width/2, (GLsizei) height/2);
      glViewport(0,0, width, height);
      // Hier wird der Mittelpunkt auf den die Perspektive zuläuft 
      // zurückgesetzt.
    
      // Hier wird die Projektionsmatrix festgelegt
     glMatrixMode(GL_PROJECTION);   
    
      glLoadIdentity(); 
      // und angepasst
    
    //glOrtho( GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near, GLdouble far )
     glOrtho(0, width, height, 0, -1.0, 1.0); 
    
      gluPerspective(45,(GLfloat)width/(GLfloat)height,0.1f,100.0f); 
       // Hier wird die das Verhältnis der Höhe zur Breite übergeben
      // und der Verzerrungswinkel von 45 Grad übergeben
    
      glMatrixMode(GL_MODELVIEW); 
      // Hier wird die sogenannte modelview-Matrix festgelegt
    
      glLoadIdentity(); 
      // und angepasst.
    
    }
    

    --Ano



  • So ich bin jetzt selbst etwas weiter gekommen...:

    gluPerspective(45,1,0.1f,100.0f);
    

    schreibe ist die Verzerrung weg..

    Aber dafür ist jetzt ein 2tes Problem sichtbar geworden:
    Ich habe zum Test mal die Koordinaten des Objekts auf die des Mauszeiger gesetzt, wenn er sich bewegt.. Das Objekt befindet sich allerdings nicht genau unter dem Mauszeige.
    Es sieht so aus als ob das Koordinatensystem nicht das gesammte OpenGL Fenster ausfüllt...

    Was kann ich tun?

    --Ano



  • Es sieht so aus als ob das Koordinatensystem nicht das gesammte OpenGL Fenster ausfüllt...

    So ist es auch. Du könntest den Viewport über's ganze Fenster setzen und als Projektionsmatrix einfach mal die Einheitsmatrix setzen, nachdem du anscheinend eh nur 2D zeichnen willst. Dann müssten die Weltkoordinaten 1:1 den Fensterkoordinaten entsprechen.



  • Du könntest den Viewport über's ganze Fenster setzen

    Ich dachte das würde ich mit

    glViewport(0,0, width, height);
    

    machen..width und height sind doch die größen des OpenGl Fensters?!

    und als Projektionsmatrix einfach mal die Einheitsmatrix setzen

    Was genau meinst du damit? Ich arbeite mich wie gesagt gerade erst in OpenGl ein..

    nachdem du anscheinend eh nur 2D zeichnen willst

    Jo will ich ...

    --Ano



  • Schau dir die Dokumentation zu glOrtho und gluPerspective mal genau an:

    "glOrtho - multiply the current matrix with an orthographic matrix "

    "The matrix generated by gluPerspective is multipled by the current matrix, just as if glMultMatrix were called with the generated matrix."

    Du multiplizierst also ein Matrix für orthogonale Projektion mit einer
    für perspektivische Proj.. Mich wundert nicht dass der Output etwas komisch aussieht.

    Kommentier das glOrtho aus wenn du eine perspektivische Projektion haben willst.



  • Kane schrieb:

    Kommentier das glOrtho aus wenn du eine perspektivische Projektion haben willst.

    Da er nur 2D zeichnen will, eher umgekehrt... 👍



  • Also wenn ich gluPerspective auskommentiere, ist überhauptnichts mehr zu sehen...
    Und umgekehrt, hat das Koordinatensystem ein völlig falsche Größe.. (also ohne GlOrtho)

    --Ano


Anmelden zum Antworten