Pergunta

Estou fazendo um jogo 2D. Quero poder renderizar uma textura na tela depois de girá -la uma certa quantidade em torno de um ponto central. Basicamente, isso é para uma rotação nivelada em torno de um jogador. A posição do jogador é o ponto de rotação e a direção do jogador como ângulo. Este código não funciona:

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()

Alguma maneira de fazer isso funcionar? Obrigada.

Foi útil?

Solução

tente reverter

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

e

glRotatef(rotation,0,0,1)

Você está traduzindo para o jogador, mas depois girando sobre a origem (não o jogador)

Ilustração do livro Vermelho: rotate

Outras dicas

A menos que você tenha um bom motivo para fazer o contrário, deixaria o código de desenho em paz e apenas mudaria o ângulo da câmera. Provavelmente, a maneira mais fácil de fazer isso é usar Glulookat. No seu caso, você aparentemente você estará olhando para a posição do jogador e apenas mudará a "direção para cima", que é fornecida nos dois últimos parâmetros.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top