Поворот четырехугольника вокруг центральной точки в OpenGL
Вопрос
Я делаю 2D игру.Я хочу иметь возможность отображать текстуру на экране после ее поворота на определенную величину вокруг центральной точки.По сути, это ротация уровней вокруг игрока.Позиция игрока — это точка вращения, а направление игрока — это угол.Этот код не будет работать:
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()
Есть ли способ заставить его работать?Спасибо.
Решение
попробуй повернуть назад
glTranslatef(point[0],point[1],0)
и
glRotatef(rotation,0,0,1)
вы переводите на проигрыватель, но затем вращаетесь вокруг источника (не игрока)
Иллюстрация из Красная книга:
Другие советы
Если у вас нет веской причины поступить иначе, я бы оставил код рисования в покое и просто изменил угол камеры.Вероятно, самый простой способ сделать это — использовать gluLookAt.В вашем случае вы, очевидно, будете смотреть на позицию игрока и просто измените «направление вверх», которое задано в двух последних параметрах.