texturen mit OpenGL



  • hi leute,

    ich hab mich heute ans texture mapping in c++ machen wollen. Erste sachen im netz gelesen und mir gesagt: man ist das kompli.

    So mit den Aux-was weiß ich ni und den glGenTexture. Dann hab ich einiges sinnlos abgetippt und das funktioniert dann auch nichtmal. Hat jemand ein sehr gutes Tutorial mit erklärungen oder mal selber eins geschreiben und kann mir das erklären ?!

    danke für alles
    mfg freaker



  • Hallo,

    Kapitel 9 im RedBook. Solltest du definitiv haben, wenn du dich ernsthaft mit OpenGL auseinander setzen möchtest.

    Eine "alte" Version gibts hier online:
    http://www.opengl.org/documentation/red_book/

    Da steht alles wissenswerte drin mit Beispielprogrammen.

    gruß Martin



  • Tutorials gibts genug, frag google 😉
    Außerdem gibts noch den Quasi-Klassiker http://nehe.gamedev.net.

    Aber so schwer ist die Sache nicht. Du musst dir nur klar machen, dass ein OpenGL-Renderer eine State-Machine ist, du mit den gl* Funktionen also nur ihren aktuellen Zustand änderst. Den ganzen Kram, der nicht rendert sondern nur lädt oder ähnliches ist dagegen in so einer Art "Arme-Leute-OOP" gehalten, du übergibst also immer einen Handler.
    Eine Textur aus einem Array laden ist eigentlich gar nicht so schwer:

    unsigned data[x][y];
    
    GLint texture;
    
    glGenTextures (1, &texture);
    
    glBindTexture (GL_TEXTURE_2D, texture);
    
    glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA, x, y, 0,
                  GL_RGBA, GL_UNSIGNED_INT_8_8_8_8, data);
    
    glTexParameteri (GL_TEXTURE_2D, NAME, WERT);
    

    Mit glTexParameteri kannst du dann noch verschiedene Eigenschaften der Textur beeinflussen, das schaust du am besten per "man glTexParameteri" nach. (Manpages gibts übrigens für alle Funktionen, sofern du ein Unix benutzt).

    In deiner Zeichnen-Funktion musst du dann, wenn du verschiedene Texturen hast GL_TEXTURE_2D an den richtigen Handler binden (das macht glBindTexture) und kannst dann mit glTexCoord* die Texturkoordinaten angeben, die an den darauffolgenden Vertex "gebunden" werden.

    glBindTexture (GL_TEXTURE_2D, texture);
    
    glBegin (GL_QUADS);
    
    glTexCoord2f (0.0f, 0.0f);
    glVertex3f (bla, bla, bla);
    // etc.
    
    glEnd ();
    

    Weil du nett bist, räumst du deinen Myll, wenn du ihn nicht mehr brauchst auf:

    glDeleteTextures (1, &texture);
    

    Damit das ganze überhaupt funktioniert, schaltest du vorher Texturierung mit

    glEnable (GL_TEXTURE_2D);
    


  • Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum Spiele-/Grafikprogrammierung verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


Anmelden zum Antworten