Texture-Mapping in OpenGL



  • Hi, ich habe ein Frage zu OpenGL-Texturemapping. Da ich im Moment eine Ausarbeitung schreiben muss und aber im moment keine Möglichkeit habe Code auszuführen habe ich folgende Frage.

    Für Texturemapping werden ja folgende Fiunktionen verwendet:

    Beispielcode:

    glBindTexture(GL_TEXTURE_2D, 100);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
    glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
    glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
    glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
    glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
    glTexImage2D (GL_TEXTURE_2D, 0, GL_RGB, imageWidth, imageHeight, 
                  0, GL_RGB, GL_UNSIGNED_BYTE, imageData);
    
    glBindTexture (GL_TEXTURE_2D, 100);
    glBegin (GL_QUADS);
    glTexCoord2f (0.0, 0.0);
    glVertex3f (0.0, 0.0, 0.0);
    glTexCoord2f (1.0, 0.0);
    glVertex3f (10.0, 0.0, 0.0);
    glTexCoord2f (1.0, 1.0);
    glVertex3f (10.0, 10.0, 0.0);
    glTexCoord2f (0.0, 1.0);
    glVertex3f (0.0, 10.0, 0.0);
    glEnd ();
    

    Soweit ich dieses Beispiel verstanden habe, wird ja mit glBindTexture anfangs das Texture mit der ID 100 aktiviert und kann beladen werden. Alle Operationen beziehen sich somit auf diese ID 100.
    Kurz vor dem zeichnen aber wird glBindTexture erneut aufgerufen. Warum ? Reicht hier nicht noch der erste glBindTexture-Aufruf aus ? Wenn nein, kan mir jemand erklären warum ? 😞


  • Mod

    das zweite bind solltest du nicht brauchen falls du zwischendurch nichts anderes angebunden hast.

    aber eine fest konstante einzutragen ist ziemlicher bullshit, da der treiber sonst was dahinter verstehen kann, z.b. koennten es pointer sein. deswegen erst immer ein handle generieren lassen und das benutzen.



  • Thanx für die Antwort 😉
    @Bullshit..danke für die Info..aber dies weiss ich bereits..soll nu ein anschauliches beispiel sein 😉



  • es handelt sich hier offenbar um zwei quelltext-ausschnitte: init (zeile 1-8) und rendering (11-21)...



  • FinalbrainXP schrieb:

    Soweit ich dieses Beispiel verstanden habe, wird ja mit glBindTexture anfangs das Texture mit der ID 100 aktiviert und kann beladen werden. Alle Operationen beziehen sich somit auf diese ID 100.
    Kurz vor dem zeichnen aber wird glBindTexture erneut aufgerufen. Warum ? Reicht hier nicht noch der erste glBindTexture-Aufruf aus ? Wenn nein, kan mir jemand erklären warum ? 😞

    Du definierst und verwendest hier das Textur-Objekt mit dem "Namen" 100. Wenn das das einzige Textur-Objekt ist welches das Programm verwendet reicht ein "bind" aus. Die EXT_texture_object (die glBindTexture überhaupt eingeführt hat - ist erst ab Version 1.1 im Standard) wurde aber genau dafür gemacht dass man Textur-Objekte definieren kann, zwischen denen man dann "hin und her schalten" kann, ohne jedesmal glTexImageXD aufrufen zu müssen.

    Wenn also in dem Programm mehrere Texturen verwendet werden, dann macht es Sinn vor dem Rendern die für den jeweiligen Teil der Geometrie passende Textur mit glBindTexture wieder auszuwählen, sonst wird u.U. mit der falschen Textur gerendert.

    BTW: du solltest u.U. nicht einfach 100 reinschreiben, sondern glGenTextures/glDeleteTextures verwenden um "Texturnamen" zu verwalten.


Anmelden zum Antworten