Вращать четырехугольник вокруг центральной точки в OpenGL - PullRequest
3 голосов
/ 19 января 2010

Я делаю 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()

Есть ли способ заставить его работать? Спасибо.

Ответы [ 2 ]

2 голосов
/ 19 января 2010

попробуйте поменять местами

glTranslatef(point[0],point[1],0)

и

glRotatef(rotation,0,0,1)

вы переводите игроку, но затем вращаетесь вокруг источника (не игрока)

Иллюстрация из Красной книги : rotate

0 голосов
/ 19 января 2010

Если у вас нет веских причин поступить иначе, я бы оставил код рисования в покое и просто изменил угол камеры.Вероятно, самый простой способ сделать это - использовать gluLookAt.В вашем случае вы, очевидно, будете смотреть на позицию игрока и просто измените «направление вверх», которое указано в двух последних параметрах.

...