Ruotare un quad attorno a un punto centrale in OpenGL
Domanda
Sto facendo un gioco 2D. Voglio essere in grado di rendere una texture sullo schermo dopo la rotazione è una certa quantità attorno a un punto centrale. Fondamentalmente si tratta di una rotazione attorno livello di un giocatore. La posizione del giocatore è il punto di rotazione e la direzione del giocatore come l'angolo. Questo lavoro Codice abituato:
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()
Un modo per farlo funzionare? Grazie.
Soluzione
provare a invertire
glTranslatef(point[0],point[1],0)
e
glRotatef(rotation,0,0,1)
si sta traducendo al giocatore, ma poi ruotando circa l'origine (non il giocatore)
Altri suggerimenti
Se non avete una buona ragione per fare altrimenti, avrei lasciato il codice di disegno da solo, e basta cambiare l'angolazione della telecamera. Probabilmente il modo più semplice per farlo è utilizzare gluLookAt. Nel tuo caso, ti pare essere guardando la posizione del giocatore, e basta cambiare il "up direzione", che è dato in questi ultimi due parametri.