Drehen Sie einen Quad um einen Mittelpunkt in OpenGL
Frage
Ich mache ein Spiel 2D. Ich möchte in der Lage, eine Textur auf dem Bildschirm zu machen, nachdem er einen bestimmten Betrag um einen Mittelpunkt dreht. Im Grunde ist dies eine Ebene Rotation um einen Spieler. Der Spieler Position ist der Drehpunkt und die Richtung des Spielers, wenn der Winkel. Dieser Code wird nicht funktionieren:
def draw_texture(texture,offset,size,a,rounded,rotation,point):
glMatrixMode(GL_MODELVIEW)
glLoadIdentity() #Loads model matrix
glColor4f(1,1,1,float(a)/255.0)
glTranslatef(point[0],point[1],0)
glRotatef(rotation,0,0,1)
glBindTexture(GL_TEXTURE_2D, texture)
if rounded == 0:
glBegin(GL_QUADS)
glTexCoord2f(0.0, 0.0)
glVertex2i(*offset) #Top Left
glTexCoord2f(0.0, 1.0)
glVertex2i(offset[0],offset[1] + size[1]) #Bottom Left
glTexCoord2f(1.0, 1.0)
glVertex2i(offset[0] + size[0],offset[1] + size[1]) #Bottom, Right
glTexCoord2f(1.0, 0.0)
glVertex2i(offset[0] + size[0],offset[1]) #Top, Right
glEnd()
else:
#Nothing important here
glEnd()
Jede Art und Weise es zum Laufen zu bringen? Danke.
Lösung
versuchen Umkehr
glTranslatef(point[0],point[1],0)
und
glRotatef(rotation,0,0,1)
Sie übersetzen an den Spieler, aber dann eine Drehung um den Ursprung (nicht der Spieler)
Illustration aus dem roten Buch :
Andere Tipps
Es sei denn, Sie haben einen guten Grund, anders zu handeln, würde ich die Zeichnung Code allein lassen und nur den Kamerawinkel ändern. Die wahrscheinlich einfachste Weg, dies zu tun, ist die Verwendung gluLookAt. In Ihrem Fall, werden Sie scheinbar auf die Position des Spielers suchen werden, und ändern Sie einfach die „Aufwärtsrichtung“, die in den letzten beiden Parameter angegeben wird.