Faire tourner un quad autour d'un point central dans OpenGL
Question
Je fais un jeu en 2D. Je veux être en mesure de rendre une texture à l'écran après la rotation d'une certaine quantité autour d'un point central. En gros, cela est une rotation de niveau autour d'un joueur. La position de joueur étant le point de rotation et la direction du joueur comme étant l'angle. Ce code wont travail:
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()
Une manière de le faire fonctionner? Merci.
La solution
inversez
glTranslatef(point[0],point[1],0)
et
glRotatef(rotation,0,0,1)
vous traduisez au joueur, mais tournant autour de l'origine (pas le joueur)
Illustration du livre rouge :
Autres conseils
Sauf si vous avez une bonne raison de faire autrement, je quitterais le code de dessin seul, et il suffit de changer l'angle de la caméra. Probablement la meilleure façon de le faire est d'utiliser gluLookAt. Dans votre cas, vous semble-t-regarderez la position du joueur, et il suffit de changer la « direction jusqu'à », qui est donné dans les deux derniers paramètres.