Bild in OpenGL steht auf dem Kopf



  • Hallo zusammen,

    ich habe mit SDL_LoadBMP ein Bild in den Speicher geladen und dann später mit OpenGL auf ein Quadrat gemappt. Das Bild steht aber jetzt auf dem Kopf. Ich kann nun natürlich die Koordinaten entsprechend angeben und das Bild an der X-Achse spiegeln, dann steht es nicht mehr auf dem Kopf:

    glBegin (GL_QUADS);
    		glTexCoord2f (0, 0); glVertex3f (-1,  1, 0);
    		glTexCoord2f (1, 0); glVertex3f ( 1,  1, 0);
    		glTexCoord2f (1, 1); glVertex3f ( 1, -1, 0);
    		glTexCoord2f (0, 1); glVertex3f (-1, -1, 0);
    glEnd ();
    

    Die Frage ist aber: Warum steht das Bild auf dem Kopf? Ich vermute, es liegt an SDL_LoadBMP und das Bild wird schon beim Laden "falsch" herum im Speicher abgelegt. Ist meine Vermutung richtig? Und wenn ja, warum ist das so? Es muß dafür ja irgendeinen Grund geben, oder?

    Gruß,



  • Hmm, ich weiss nicht wie die Texturcoordinaten in OpenGL aussehen. Du gibst jedenfalls die Texturcordinaten in anderer Reinfolge an als die Vertexcoordinaten.

    edit: Ist es nicht so, dass bei Texturcoodinaten die Y-Achse nach unten zeigt? dann müssten die Coordinaten wie du sie angegeben hast richtig sein.



  • Ist das der fehlerhafte, oder der richtige Code?



  • Ja 😉 !

    Gruß,
    Lightman



  • BMPs können auch auf dem Kopf gespeichert sein. Dann wäre der SDL_Loader falsch...
    Hast du das Problem mit allen BMPs?



  • Ja, das war's!

    vielen Dank Leute!
    Lightman



  • Deine Vertices sind im Uhrzeigersinn angeordnet, d. h. du siehst die Rückseite der Polygone. Das ist zwar prinzipiell nicht falsch, jedoch ist es schöner wenn man sie gegen den Uhrzeigersinn ordnet

    wenn du dein Bild so renderst, dann sollte es nicht mehr auf den Kopf stehen:

    glBegin (GL_QUADS);
            glTexCoord2f (0, 0); glVertex3f (-1,  -1, 0);
            glTexCoord2f (1, 0); glVertex3f ( 1,  -1, 0);
            glTexCoord2f (1, 1); glVertex3f ( 1,   1, 0);
            glTexCoord2f (0, 1); glVertex3f (-1,   1, 0);
    glEnd ();
    

    Wenn es trotzdem auf dem Kopf steht macht dein Bild lade Algorithmus - d. h. verwendet ein anderes Speicherlayout - das Pixel mit Koordinaten (0,0) befindet sich dann wo (0,Height-1) ist...

    Beispiel für Fehlerhafte Interpretation des Speicherlayouts:
    http://loop.servehttp.com/~vertexwahn/uploads/texturecoordinatesgl.png


Log in to reply