Como Criar Animacoes Para Avioes Do Flightgear

ANIMAÇÕES DE MODELOS 3D NO FLIGHTGEAR

As animações no Flightgear tem a finalidade de exibir, durante a simulação, algum movimento para algum objeto do modelo 3D da aeronave. Utilizando as animações, podemos criar movimentos ordenados e coordenados, iniciados por uma ou mais propriedades. Por exemplo, se o trem de pouso estiver definido como 'baixado', então mostrar as rodas em uma posição, senão mostrar em outra posição. Ainda outro exemplo, se o motor estiver ligado, então girar o fan, senão deixar essa parte parada. Todos movimentos vistos em um modelo 3d com o simulador em execução, é fruto de alguma animação definida pelo criador da aeronave.

Tipos de Animações

Rotate

A animação rotate possibilita que um objeto 3d seja rotacionado em torno de um eixo fixo, ou centro com aparece no código XML. Vejamos o exemplo a seguir do trem de pouso dianteiro do Boeing 707:

  <animation>
  <type>rotate</type>
  <object-name>nosegear</object-name>
  <property>gear/gear[0]/position-norm</property>
   <interpolation>
    <entry>
      <ind>0.0</ind>
      <dep>115.0</dep>
    </entry>
    <entry>
      <ind>0.25</ind>
      <dep>115.0</dep>
    </entry>
    <entry>
      <ind>0.75</ind>
      <dep>0.0</dep>
    </entry>
    <entry>
      <ind>1.0</ind>
      <dep>0.0</dep>
    </entry>
  </interpolation>
  <center>
   <x-m>-15.46</x-m>
   <y-m>0</y-m>
   <z-m>-1.40</z-m>
  </center>
  <axis>
   <x>0</x>
   <y>1</y>
   <z>0</z>
  </axis>
 </animation>

Vou considerar que o leitor sabe como funciona um XML e como é estruturado, a sua idéia de elementos. Vejamos o que cada uma das linhas acima definem

<animation> - define que estamos declarando uma animação, lembre-se de encerrar cada elemento do XML, no caso do <animation>, com o código </animation>.

<type>rotate</type> - estabelece que o tipo de movimentação será 'rotate', rotação em torno de um eixo.

<object-name>nosegear</object-name> - é o nome do objeto que será movimentado. Para descobrir o nome de um objeto do modelo 3d, ou seja, de uma parte do avião, abra o modelo 3d no AC3D, selecione o objeto desejado com o seletor de objetos e então verifique seu nome no canto inferior esquerdo da tela.

<property>gear/gear[0]/position-norm</property> - aqui é definida a propriedade que comandará a animação, neste caso, o tem de pouso '0' (zero). Essa propriedade assume valores 0 e 1.

<interpolation>
 <entry>
   <ind>0.0</ind>
   <dep>115.0</dep>
 </entry>
 <entry>
   <ind>0.25</ind>
   <dep>115.0</dep>
 </entry>
 <entry>
   <ind>0.75</ind>
   <dep>0.0</dep>
 </entry>
 <entry>
   <ind>1.0</ind>
   <dep>0.0</dep>
 </entry>
</interpolation>

O elemento <interpolation> é uma tabela de interpolação, onde cada <entry> é uma linha dessa tabela. Antes de falar mais sobre isso, vou explicar o funcionamento de uma animação. A animação é coordenada pelo valor de uma propriedade. Se a propriedade é zero, mostra uma coisa, se a propriedade é 1, mostra outra coisa para o usuário do simulador. Exemplo, se trem de pouso baixado (ou seja gear/gear[0]/position-norm = 1), mostra as rodas. Se trem de pouso recolhido (ou seja gear/gear[0]/position-norm = 1), não mostra as rodas. Compreendido? Ok, mas ninguémm acha interessante que as rodas apareçam e desapareçam num passe de mágica. 1 então aparece, 0 então desaparece. Isso seria pouco realístico e pareceria grosseiro um avião assim. Então é necessário criar um movimento contínuo. Essa é a tarefa da tabela de interpolação. Definidos alguns pontos, o movimento será suavizado, ou seja, o objeto do modelo 3d se deslocará de 0 a 1 suavemente, durante algum tempo. O que resulta em uma bela animação de baixar ou recolher o trem de pouso. Vejamos então cada entrada dessa tabela:

 <entry>
   <ind>0.0</ind>
   <dep>115.0</dep>
 </entry>

Informa que, quando a propriedade for 0.0 (zero), então o objeto do modelo 3d sofrerá uma rotação de 115° (cento e quinze graus).

 <entry>
   <ind>0.25</ind>
   <dep>115.0</dep>
 </entry>

Informa que, quando a propriedade for 0.25, então o objeto do modelo 3d sofrerá uma rotação de 115°.

 <entry>
   <ind>0.75</ind>
   <dep>0.0</dep>
 </entry>

Informa que, quando a propriedade for 0.75, então o objeto do modelo 3d sofrerá uma rotação de 0.0°, ou seja, estará na posição natural dele. Onde posição natural é aquela em que encontramos o objeto do modelo 3d normalmente no AC3D.

 <entry>
   <ind>1.0</ind>
   <dep>0.0</dep>
 </entry>

Informa que, quando a propriedade for 1.0 (um), então o objeto do modelo 3d sofrerá uma rotação de 0.0°.

Em suma, o valor da propriedade, ou índice como é chamado, vai variando de 0 até chegar em 1 ao longo de um determinado tempo. A animação então fica ritmada, coordenada, por esse índice.

  <center>
   <x-m>-15.46</x-m>
   <y-m>0</y-m>
   <z-m>-1.40</z-m>
  </center>

O elementro <center> especifica o centro da rotação, onde devemos especificar os valores de X, Y e Z deste centro de rotação. A posição de um ponto que funciona como centro pode ser obtida com o AC3D. Abra o AC3D, selecione um ponto que funcionará como centro para a rotação e olhe as coordenadas desse ponto na parte superior da tela. Outra maneira de capturar o valor <x,y,z> de um ponto é usar o plugin para o AC3D "Vertex positions to clipboard". Esse plugin simplifica muito a tarefa de descobrir coordenadas no espaço.
Sendo mais claro sobre o que é um centro de rotação, pense em um fan de um turbofan (turbina), ele gira em torno de seu eixo central. Então o centro de rotação do fan é o seu eixo central. Se desejarmos animar um fan, devemos saber as coordenadas do eixo central do fan. Esse foi apenas um exemplo para compreender o que é um centro de rotação, pois o tipo de rotação mais adequado para animar um fan não é o 'rotate', mas sim o 'spin'.

  <axis>
   <x>0</x>
   <y>1</y>
   <z>0</z>
  </axis>

O elemento axis determina em torno de que eixo (x, y ou z) o objeto do modelo 3d sofrerá a rotação. Se o elemento <x> de <axis> receber o valor 1, então a rotação se dará em torno do eixo x. Ao passo que se o elemento <y> de <axis> receber o valor 1, então a rotação se dará em torno do eixo y. Quando o elemento de um eixo recebe valor zero, então não há rotação em torno deste eixo.
Resumindo, então o objeto é movimentado em torno de um eixo e tendo como referencia um ponto chamado de centro. Por exemplo, um carrossel de crianças sofre uma rotação no eixo 'z' tendo como referência o seu meio. Experimente a mudança de valores e teste no simulador. O processo de tentativa e erro também nos leva a adquirir aconhecimento de como as coisas funcionam e desenvolvem a habilidade de animar peças e pensar em coordenadas <x,y,z>

Spin

A animação de tipo spin possibilita uma rotação contínua e coordenada de um objeto do modelo 3d. Esse tipo de animação geralmente é utilizado em hélices e fans de turbofans. Veja o exemplo abaixo, é uma animação para o fan do primeiro reator P&W JT3D de um 707-300

 <animation>
  <type>spin</type>
  <object-name>fandisk</object-name>
  <property>engines/engine[0]/n1</property>
  <factor>10</factor>   
  <center>
   <x-m> 1.87</x-m>
   <y-m>-14.81</y-m>
   <z-m>-0.18</z-m>
  </center>
  <axis>
   <x>1</x>
   <y>0</y>
   <z>0</z>
  </axis>
 </animation>

Pode-se notar que muitos elementos são comuns com o tipo de animação abordado anteriormente. Veja abaixo a descrição dos itens desse tipo de animação.

<animation> - define que estamos declarando uma animação, lembre-se de encerrar cada elemento do XML, no caso do <animation>, com o código </animation>.

<type>spin</type> - estabelece que o tipo de movimentação será 'spin', rotação em torno de um ponto central. Diferentemente da animação de tipo 'rotate', a animação de tipo 'spin' é contínua, ou seja, o objeto será rotacionado 360° indefinidamente segundo a propriedade que o comanda.

<object-name>fandisk</object-name> - é o nome do objeto que será movimentado. Para descobrir o nome de um objeto do modelo 3d, ou seja, de uma parte do avião, abra o modelo 3d no AC3D, selecione o objeto desejado com o seletor de objetos e então verifique seu nome no canto inferior esquerdo da tela. Neste exemplo, fandisk é o nome do objeto 3d do fan do primeiro reator P&W JT3D de um 707-300.

<property>engines/engine[0]/n1</property> - aqui é definida a propriedade que comandará a animação, neste caso, a utilização do dispositivo n1 de um turbofan, que geralmente varia entre 0% e 100%.

<factor>10</factor> - O <factor> funciona como um fator multiplicativo para a relação entre a propriedade comandante o movimento executado pelo objeto 3d comandado. A propriedade 'controls/rudder' varia entre 0 e 1 e eu quero que o objeto Rudder do avião (modelo 3d) se movimente 18°, então devo usar um fator 18. Ou seja, 18 * 0 = 0 e 18 * 1 = 18, portanto o objeto Rudder se movimentará entre 0 e 18.

Translate

Xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

REFERÊNCIAS

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License