Desenho de esqueletos

Deve haver muitas maneiras de descrever a estrutura dos ossos de uma personagem para animação. Eu vou descrever algo que desenvolvi que considero simples de explicar e também de implementar.

Um osso é caracterizado por uma origem, e uma rotação. Ele pode estar ligado a outros ossos que se movimentam junto. Então podemos pensar em uma estrutura da seguinte forma:

A posição de um osso inferior é determinada em relação à origem do osso superior na estrutura. Então, ao contrário de um esqueleto orgânico, não é necessário que eles se toquem.

Também vou adicionar dois outros parâmetros, que serão uma lista de vértices de um polígono, além da cor com que devem ser desenhados. Quando se aplicar uma rotação ao osso, é necessário rotacionar todos os vértices do polígono, de maneira a que estes acompanhem o movimento do membro.

Para facilitar as coisas, escrevi uma rotina que pega essas informações de um arquivo e criam a estrutura de dados. Não vou entrar em detalhes de seu funcionamento, e não garanto que não haja problemas em sua implementação. Todavia, se o arquivo de entrada estiver no formato esperado, ela vai funcionar.

A rotina para desenhar o osso é bem simples:

É uma função recursiva, que atua sobre o osso passado como parâmetro e sobre os seus descendentes. Ela pede, como parâmetros, o osso, a posição de origem em que deve ser desenhado, e a rotação que deve ser aplicada.

Ela começa rotacionando a posição do osso em relação à origem passada como parâmetro, repete então o processo em todos os vértices do polígono que será desenhado, e então o desenha usando a função draw_polygon_filled, do SDL, com a cor definida.

Em seguida, cada osso descendente repete esse mesmo procedimento, com a diferença de que a rotação que foi recebida como parâmetro é somada com a rotação inicial do osso, e a origem é a posição do osso atual.

Para fazer a animação, basta definir programaticamente os ângulos de rotação na estrutura de dados.

O programa de exemplo completo está abaixo:

O arquivo esqueleto_exemplo.txt com a estrutura do esqueleto está abaixo:

O funcionamento da função de rotação já foi explicado em um artigo anterior. O programa é razoavelmente inteligível, e talvez não precise de maiores explicações para quem entendeu como funciona o SDL.

Depois de executá-lo, uma janela será mostrada, e basta pressionar as teclas j e k para movimentar a coxa, e i e u para movimentar a canela. A animação é toda determinada pelo usuário.

Nos próximos artigos pretendo mostrar como aplicar movimentos autônomos a essa animação, de maneira que, por exemplo, possamos replicar uma caminhada.

Deixe uma resposta

O seu endereço de email não será publicado Campos obrigatórios são marcados *

Você pode usar estas tags e atributos de HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">