[OpenGL] Flächen-Texture-Mapping



  • Ich bastel gerade daran, dass eine Textur aus einer Fläche auf ein Objekt projiziert wird.

    Das Grundprinzip ist sehr einfach, zur Berechnung der Texturkoordinaten werden alle Vertices durchlaufen und deren x- sowie y-Werte ins Verhältnis zur Gesamtgröße des Objekts gesetzt.

    Im Grunde funktioniert das auch alles prima, jedoch gibt es bei der Rotation der Textur ein paar Probleme.

    Ich habe erstmal selbst eine Funktion dafür geschrieben, die so funktioniert: Erst werden alle Vertices transfomiert, und dann auf das neue Objekt die Textur projiziert (ob ich nun das Textur oder das Objekt drehe, ist ja relativ, und Objekt drehen erschien mir einfacher).
    Vom Prinzip her funktioniert das auch. Ich habe dann mal die OGL-Internen Routinen zur Texturtransformation genutzt, doch da ist das Ergebnis ganz anders.

    Zur Verdeutlich:

    Wenn ich die Vertices selbst transformiere, sieht es bei einer Drehung von 45° um die y-Achse so aus(so in etwa sollte es auch aussehen):

    http://www.strategieworld.de/Sonstiges/modell_texturrotation1.jpg

    Das gleiche bei der OGL-Rotation:
    http://www.strategieworld.de/Sonstiges/modell_texturrotation2.jpg
    Hier verschiebt sich die textur nur ein kleines bisschen, drehe ich sie um 90°, ist sie garnicht mehr zu sehen. Allerdings funktioniert es bei Drehung um die z-Achse einwandfrei.

    Muss man dabei noch was beachten? Der Code sieht so aus:

    glMatrixMode(GL_TEXTURE);
           glLoadIdentity();
           glTranslated(i->TexturePos.x,i->TexturePos.y,i->TexturePos.z);
           glRotated(i->TextureAngle.x,1,0,0);
           glRotated(i->TextureAngle.y,0,1,0);
           glRotated(i->TextureAngle.z,0,0,1);
           glScaled(i->TextureScaleX/100,i->TextureScaleY/100,1);
       glMatrixMode(GL_MODELVIEW);
    

    Danach wird das Objekt mit den vorher schon berechneten TexturKoordinaten gerendert.
    Die sehen im Falle des Würfels so aus: (-0.5,-0.5) , (-0.5,0.5), (0.5,0.5), (0.5,-0.5).

    Vieln danke schonmal!

    EDIT:: Hat sicher erledigt, hatte keine 3D-Texturkoordindaten angegeben... jetzt kommt das Gleiche raus 😃


Anmelden zum Antworten