glPixelZoom verweigert die Zusammenarbeit



  • Hallo,

    ich möchte in meiner OpenGL-Anwendung eigentlich nur ein bisschen Debug-Text anzeigen...
    Also lad ich mir mit wglUseFontBitmaps() die entsprechende Font-Bitmaps, setze meine orthogonale Projektionsmatrix und rufe die erzeugten Displaylisten auf... Ich möchte aber, wie von 2D APIs gewohnt, die Koordinaten (0,0) in der linken oberen Ecke des Fensters haben.
    Diverse Quellen schlagen vor, mit glPixelZoom(1, -1) dass Koordinatensystem einfach umzudrehen... Dummerweise scheint sich OpenGL nicht um diese Angabe zu kümmern :(, der Text erscheint nach wie vor unten im Fenster...

    void RendererOpenGL::SetOrthoProj()
    {
    	glPushAttrib(GL_TRANSFORM_BIT);  //save matrixmode 
    	glMatrixMode(GL_PROJECTION);
    	glLoadIdentity();
    	gluOrtho2D(0, m_window_width,  0, m_window_height);
    
    	//we need this to get a coordinate system starting at top left corner
    	glPixelZoom(1.0f, -1.0f);
    	glPopAttrib();  //restore matrixmode 
    }
    
    void RendererOpenGL::Test()
    {
             ...
    	SetOrthoProj();
    
    	glLoadIdentity();
    
             ... //String vorbereiten
    
    	glColor3f(1.0f,1.0f,1.0f);
    	glRasterPos3i(10,10, -1);
    	m_defaultfont->RenderText(fps_string); //ruft die vorher erzeugten Displaylisten auf
            ...
    }
    

    Danke schonmal für jedwede Hilfe...

    Martin

    Achja: WinXP SP2 auf NVidia GF Ti4200, Visual-C++ Express 2005


  • Mod

    setz die orthogonale projektionsmatrix halt so dass obenlinks 0 ist.



  • Das war ja das erste, dass ich versucht hatte 😞 , aber scheinbar kommt GL mit top<bottom überhaupt nicht klar, es wird auf jeden Fall nix gezeichnet...
    Also ich hab's einfach so versucht, falls ich nen massiven Denkfehler fabriziert hab, bitte korrigieren:

    gluOrtho2D(0, m_window_width,  m_window_height, 0);
    


  • hi,

    verwende einfach

    glRasterPos2d(iX, iY);
    

    da erscheint der Text links oben (musst aber in 2D rendern)

    mfg



  • Nein leider nicht...
    Das ist das gleiche, das ich mache, nur dass statt float double Werte erwartet werden und die z-Koordinate einfach 0 gesetzt wird...



  • Hab das Problem gerade gelöst...
    Ich hab beim initialisieren des Renderers die falsche Fenstergröße (gesamtes Fenster, nicht nur Clientbereich) angegeben, die Zeichenposition lag also irgendwo in Titel- oder Menüleiste...

    Grüße,

    Martin


Anmelden zum Antworten