OpenGL: Texture rotieren
-
Hallo,
ich versuche verzweifelt, eine Texture auf ein Rechteck zu mappen und um einen Winkel [°] zu rotieren. Trotz diverser Beispielposts in Foren will mir das nicht gelingen. Hier meine Funktion:
void GLWidget::drawArrow(double w_x, double w_y, double rot_deg) { double w = 0.0005; double w_half = w / 2.0; glEnable(GL_TEXTURE_2D); m_pArrow->bind(); // Kapselt den ganzen Bind-Mist glMatrixMode(GL_TEXTURE); glLoadIdentity(); glTranslatef(w_x, w_y, 0.0); glRotatef(rot_deg, 0.0, 0.0, 1.0); glTranslatef(-w_x, -w_y, 0.0); glMatrixMode(GL_MODELVIEW); glBegin(GL_QUADS); glTexCoord2d(0, 0); glVertex3d(w_x - w_half, w_y - w_half, 0); glTexCoord2d(1, 0); glVertex3d(w_x + w_half, w_y - w_half, 0); glTexCoord2d(1, 1); glVertex3d(w_x + w_half, w_y + w_half, 0); glTexCoord2d(0, 1); glVertex3d(w_x - w_half, w_y + w_half, 0); glEnd(); glDisable(GL_TEXTURE_2D); }
Ergebnis, wenn ich diese Funktion mit "135.0" aufrufe:
http://abload.de/img/arrowu1l1y.png
- Es sind nicht 135° sondern 225°?
- Die Rotation scheint nicht um den Ursprung geschehen zu sein, da Artefakte (Textur erscheint an den Rändern abgeschnitten) auftreten
- Ich zeichne noch mit glTextFont (fontDrawString) Texte, die allerdings zerstört werden, sobald meine drawArrow() aufgerufen wird
Was ist hier alles falsch
-
Rechnest du auch im Bogenmaß?
-
XMAMan schrieb:
Rechnest du auch im Bogenmaß?
Soll laut Doku nicht in Grad gerechnet werden?
-
[quote="NoOP345"]
XMAMan schrieb:
Soll laut Doku nicht in Grad gerechnet werden?
AFAIK doch, Grad ist schon richtig.
NoOP345 schrieb:
- Es sind nicht 135° sondern 225°?
- Die Rotation scheint nicht um den Ursprung geschehen zu sein, da Artefakte (Textur erscheint an den Rändern abgeschnitten) auftreten
- Ich zeichne noch mit glTextFont (fontDrawString) Texte, die allerdings zerstört werden, sobald meine drawArrow() aufgerufen wird
- Es dreht halt in die andere Richtung als die die du erwartest. Kannst den Winkel ja mit -1 multiplizieren, dann sollte es gehen.
- Ohne überprüft zu haben ob der Code für die Rotation richtig ist: Die Textur wird natürlich abgeschnitten. Zwei gerehte Vierecke passen nunmal nicht aufeinander, deshalb wird ein Teil der Textur abgeschnitten und ein anderer Teil wiederholt.
- Du musst für "fontDrawString" auch eine eigene Matrix laden, sonst wird die letzte (aka die von "drawArrow" verwendet. Tipp: Matrizen mit "glPushMatrix" und "glPopMatrix" sichern und wiederherstellen.