Cours : Les rotations dans Flightgear
+2
Patten
Alexis
6 participants
Page 1 sur 1
Cours : Les rotations dans Flightgear
Retrouvez tous les autres tutoriels concernant le développement de FG ici
Les rotations sont une des animations les plus utilisées. En bien oui beaucoup d’objet tournent dans un avion, que ce soit les ailerons, les volets, les dizaines d’aiguilles que l’on peut rencontrer dans un cockpit sans parler des interrupteurs, des manettes… bref de quoi vous amuser pendant un bon bout de temps. A la fin de ce tutoriel, vous serez capable de faire tourner n’importe quel objet dans le sens que vous voulez. Sachez aussi qu'une rotation peut-être extrêmement simple comme elle peut être incroyablement complexe !
Si un jour vous avez la bonne idée de vous lancer dans l'animation d'un train et que par la même occasion celui-ci se plie dans tous les sens et suivant un timing particulier tout comme ses 3 portes qui s'ouvrent et se ferment sur lui suivant un autre timing bien précis, je vous dis bon courage ! Mais quand on y arrive et qu'on peut voire après plusieurs centaines de tentatives que ça rentre parfaitement, là c'est que du bonheur !
Allez attachez vos ceintures, ouvrez grand vos yeux, bienvenue dans un monde qui vous fait tourner la tête !
Pré-requis
Avant toute chose, je vous conseille d’avoir lu les tutoriels suivants, si ce n’est pas le cas, cliquez dessus et vous y serez redirigés. Il ne faut pas brulé les étapes.
Balise animation.
Comme pour toutes les animations, toutes les informations que nous allons rentrer seront contenues dans les balises suivantes.
Vous devez définir dans la balise suivante, le nom de l'objet qui va subir la rotation.
Il est également possible d'indiquer plusieurs objets, tout simplement en énonçant lignes après lignes leurs nom.
Si vous devez à nombreuse reprise animer plusieurs objets, il vous est possible au préalable de créer un groupe d'objets et de leur donner un nom. Regardez, la balise name permet de donner le nom du groupe, tout les objets situez en dessous en font parti. Ici, je vous propose un exemple concret avec un train d'atterrissage
Attention : les groupes doivent être créés en dehors des autres animations, il est préférable de les placer au début des fichier xml, à la suite des autres si il y en a déjà.
Il vous suffira enfin de rentrer le nom du groupe dans le object-name, soit :
Tout simplement dans blender, après avoir importé le fichier 3D , touche « n », sélectionnez l'objet dont vous souhaitez connaître le nom exact et il s'affichera ici (dans les versions de blender supérieure à 2.5) :
Type
Il faut ensuite définir le type d'animation que vous souhaitez faire. Ceux qui on un minimum suivi savent que nous parlons de rotations, donc il nous suffit d'entrer « rotate », regardez par vous-même :
La propriété : qu'est-ce qui cause cette rotation ?
Comme il a été dit dans beaucoup de tuto, dans Flightgear tout est défini par des propriétés. Ces propriétés sont des variables que l'on fait évoluer en temps réel lors de notre vol. Si je tire le manche sur la droite, je vais agir sur la propriété (controls/flight/aileron). Celle-ci va changer de valeur ce qui va automatiquement se répercuter sur l'animation des ailerons, en effet ceux-ci varient en fonction de cette propriétés.
Donc il faut définir pour quelle raison votre objet va bouger, ceci se fait dans les balises property :
Pour info, la propriété ci dessus est celle qui gère les volets. Elle est donc notamment utilisée dans l'animation de ceux-ci.
Figurez vous qu'il existe dans Flightgear une petite fenêtre bien pratique qui vous sert à afficher les propriétés et leurs valeurs : Debug > browse internal property
Voilà sa petite frimousse :
Angle de rotation.
Jusque là, s'était de la rigolade, nous entrons dans le vif du sujet. Alors je dis angle de rotation même si celles-ci n'en ont pas toujours. Je m'explique : prenez un altimètre, l'aiguille va faire un grand nombre de tours, il n'y a pas vraiment de maximum et de minimum. Maintenant prenez un anémomètre, l'aiguille ici part du 0 pour aller à une valeur maxi.
Je vais vous présenter deux manières de définir l'angle d'une rotation, on va commencer par factor, balise toute simple mais qui lorsqu'on l'accompagne de ses petites sœurs, risque de vous faire chauffer la cervelle. Lorsque l'utilisation de la balise factor devient complexe, vous comprendrez qu'il y a une autre méthode possible, plus simple : l'interpolation
Alors lorsque nous somme dans le cas d'une rotation, le factor va vous permettre de définir un angle de rotation :
Ici la rotation fera 18°, on peut imaginer cet angle de rotation pour un aileron. Mais attention, cet angle est en positif et en négatif ! Du coup, notre aileron fera un angle de +18° dans un sens et de -18° dans l'autre. Du coup le mouvement de l'aileron se fait 36°.
Si votre animation est inversée, il vous suffit de changer le signe, soit :
Pour ce qui est d’un instru comme l’altimère, vous verrez que les choses sont un peu différentes, il n’y a pas d’angles fini, vous définissez un angle/pieds si vous voulez. Les factor prend des valeurs comme 0.36 (et oui un tour fait 360°, un tour fait 1000 pieds, donc 1 pied fait 0.36°)
La balise offset-deg permet de démarrer l’animation suivant une autre valeur de la propriété, vous allez comprendre tout ça d’ici quelques lignes.
Attention, le offset-deg doit être inséré après le factor.
La balise max et min vous permet de définir une valeur maximum et minimum à votre rotation. Imaginez que votre objet doit plus tourner d’un côté que de l’autre, la balise factor le fera tourner d’un même angle de droite à gauche, vous insérez vos valeurs maximum et minimum et le tour est joué.
J’ai repris cet exemple de la doc flightgear que vous possédez tous (Flightgear/data/Docsmodel-howto.html), mais que beaucoup ne pense même pas à regarder malheureusement.
Une petite explication s’impose :
Je passe les première lignes pour arriver directement à property, la propriété en question ici est (gear/gear[0]/position-norm). Cette propriété ne prend que deux valeurs : 0 ou 1 (0= train rentré 1=train sorti).
Voici un petit tableau récapitulatif :
Par défaut, lorsque vous lancez votre avion, le train est heureusement sorti. Ceci explique pourquoi l’auteur à mis ce offset de -1. L’animation démarre à -1 et finit à 0. Le choix aurait pu être plus judicieux, mais là n’est pas la question, regardons la suite. Vous constaterez qu’il y a une valeur minimum pour la rotation de -90 alors que le factor est à 120. Ce qu’il faut comprendre c’est que le train ne bougera pas tant que le factor ne sera pas arrivé à -90. En d’autres termes, au début il ne se passe rien ! Du moins, rien du côté du train, et oui, pendant ce temps, les portes s’ouvrent.
La suite vous pouvez la deviner, arrivé à 50% de la rentrée du train (propriété = 0.5) le le train est passé à -50 et a donc tourné de 40°. Ainsi de suite jusqu’à la rentré totale du train.
Voilà, je donne cet exemple pour vous donner une idée de ce qui est possible de faire, mais cette programmation est simplifiable par l’utilisation de l’interpolation.
Derrière ce très joli nom, se cache un outil plutôt pratique dans certains cas. L’interpolation permet d’attribuer une valeur, ici une rotation, en fonction de la valeur que prend la propriété. Je m’explique :
« Quand le train est rentré est 50%, la rotation doit être arrivé à -50 » (pour l’exemple ci-dessus.)
Voilà comment ça se traduit en xml:
Lorsque l’on fait des textures en photo réaliste, la symétrie de la texture n’est pas forcément exacte (éventuels effet de perspective), regardez ce que ça donne pour le badin du DC3
Comme vous pouvez le voire, à chaque vitesse correspond une rotation de l’aiguille.
Une interpolation bien maîtrisée peut vous permettre de faire de très belles choses, vous pouvez réalisés de magnifiques animations de train d'atterrissage avec des vitesse de rotation variables et un timing parfait.
Les axes de rotation
On passe maintenant à la dernière partie de ce tutoriel, définir un axe de rotation. Avant toute chose, il faut savoir par rapport à quoi vous vous basez, tout sera en fonction du fichier 3D chargé en début du xml (éviter les erreurs cités dans le tuto « récupération de cordonnées). Là encore il y a plusieurs manières de faire, accrochez vous bien car au totale il y en a trois ! Je vais vous expliquer comment ça fonctionne et quand les utiliser.
Très utilisé pour les instruments, il se présente de la manière suivante :
Lorsque vous trouvez ces lignes, ceci veux dire qu’on utilise les axes de l’origine du repère. Importez la modélisation dans blender et ce sont ces axes que vous verrez en bleu (z) et vert (y) et en rouge (x).
Regardez de plus près le code. Seul le x prend la valeur 1, les autres sont à 0. Ceci veut dire que la rotation se fera autour de l’axe des x, si y valait 1 la rotation se ferait autour de l’axe des y, enfin vous avez compris …
Vous pouvez aussi attribuer une valeur à plusieurs axes, x=1 et y=1, dans ce cas, l’axe de rotation sera oblique (axe à 45°). Vous pouvez encore mettre des valeurs plus grandes sur certains axes, x=2 et y=1, ce qui aura aussi pour effet d’avoir un axe de rotation oblique mais ici, il sera plus proche de l’axe des x.
Vous comprendrez que ça devient compliqué, si on cherche à définir un axe oblique présent dans les 3dimentions, ça devient même totalement impossible à faire, dans ces cas là, il faut utiliser une autre méthode toute simple que je vous expliquerais plus loin.
Je voudrais maintenant vous invitez à réfléchir avant de vous lancer dans des modélisations. Prenons par exemple un manche. Si vous avez un minimum réfléchit, vous l’aurez modélisé en pensant à placer le bas du manche (là ou se trouve la rotule si vous voulez) au centre des axes, à la coordonnée (0,0,0), ce qui va vous simplifier énormément la vie car vous utiliserez le code ci-dessus pour l’animer. Même chose pour les instruments. Vous remarquerez en important un altimètre ou encore un badin qu’ils sont parfaitement centrés dans blender, le centre correspond parfaitement à la zone ou l’aiguille tourne.
Imaginons que la zone de rotation ne se trouve pas au centre des axes, mais que celle-ci reste simple. En effet celle-ci n’est pas oblique mais tourne autour d’un axe parallèle à notre x y ou z précédent. Et bien figurez-vous qu’il vous est possible de définir un nouvel axe. Il vous faut faire deux choses, indiqué le centre de cet axe, puis comme ci-dessus, indiquer l’axe de rotation. Regardez par vous-même :
Ici, l’axe de rotation sera décalé de 1.5m (et oui, les coordonnées sont en mètre) et l’objet tourne autour de l’axe des x.
Regardez cet indicateur de température d’huile (du DC3)
Comme vous pouvez le voire, les aiguilles sont toutes les deux sur les côtés, on est donc obligé de définir les axes suivant :
Côté gauche
Côté droit
Vous remarquerez que les coordonnés sont symétriques par rapport à l’axe z (logique non ?)
Je vous parlais à l’instant de rotation obliques, et bien ne vous embêtez pas à en faire avec les méthodes précédentes, vous vous compliquez la vie et vous risquer de vous arracher les cheveux. Il existe une méthode pour définir un axe très précisément et prenant des directions à vos souhaits. Elle consiste tout simplement à donner les cordonnées de deux points. Ces deux points forme un segment, le segment fait parti de la droite et la droite est votre axe ! Regardez cet exemple :
Vous remarquerez que j’ai séparé ces lignes en deux, les trois premières lignes sont les coordonnés du premier point (x1 ;y1 ;z1) et les trois dernières lignes sont les coordonnées du deuxième point (x2 ;y2 ;z2)
L'ordre des animations
Ici je parle bien d'animations, pas seulement de rotation. En effet on peut parfois avoir un mélange de rotations et de translations, on peut avoir pas mal d'animations différentes sur un même objet :
- La roue tourne autour de son axe lorsque l'avion roule.
- L'avion entame un virage et fait donc tourner la roue autour d'un autre axe.
Ce qu'il faut savoir, c'est qu'il y a un ordre dans les animations. Si dans cet exemple, on réalise la première animation (roue qui tourne autour de son axe) avant la deuxième (axe de la direction), et bien le résultat ne sera pas beau à voir ! Dans ce cas, lorsque vous agirez sur la direction, l'axe de rotation de la roue restera inchangé alors que la roue elle même à changé de place ! En inversant l'ordre des deux rotations, le problème est résolu.
Gardez ceci en tête :
Plusieurs animations sur un même objet : Toute animation est incluse dans la précédente.
Voici une petite explication toute simple de run qui devrait vous permettre de comprendre définitivement l'importance de l'ordre des animations :
Voici un parallélépipède où l'on appliquera deux rotations de 90 degrés une d'axe Z l'autre d'axe Y
Forme de départ
Rotation d'axe Z puis rotation d'axe Y
La même forme de départ
Rotation d'axe Y puis rotation d'axe Z
On s'aperçoit que l'objet final n'est pas positionné de la même manière.
Lancez-vous !
Voilà le tutoriel se termine ici, vous êtes maintenant parfaitement capable de faire des rotations dans Flightgear, il ne vous reste qu'une chose à faire : vous entraîner ! regardez aussi les choses existantes, vous verrez sans doutes des manières de voire les choses que vous n'auriez même pas imaginées.
n'hésitez pas à me fait part de vos commentaires sur ce tutoriel (vous ne comprenez pas quelque chose ?), ceci me permettrait de l'améliorer.
Outre le fait de vous entraîner, n'hésitez pas à travailler avec les xml existant. Vous éviterez ainsi les erreurs de frappe. Pensez aussi à bien présenter vos xml pour qu'ils soit agréables à lire.
Applications
Très prochainement, je vous ferais des applications sur les rotations vous expliquant comment réaliser un instru, animer une partie de l'avion ect...
Et au travail, des centaines d'avions vous attendent. !
Retrouvez tous les autres tutoriels concernant le développement de FG ici
Les rotations
Les rotations sont une des animations les plus utilisées. En bien oui beaucoup d’objet tournent dans un avion, que ce soit les ailerons, les volets, les dizaines d’aiguilles que l’on peut rencontrer dans un cockpit sans parler des interrupteurs, des manettes… bref de quoi vous amuser pendant un bon bout de temps. A la fin de ce tutoriel, vous serez capable de faire tourner n’importe quel objet dans le sens que vous voulez. Sachez aussi qu'une rotation peut-être extrêmement simple comme elle peut être incroyablement complexe !
Si un jour vous avez la bonne idée de vous lancer dans l'animation d'un train et que par la même occasion celui-ci se plie dans tous les sens et suivant un timing particulier tout comme ses 3 portes qui s'ouvrent et se ferment sur lui suivant un autre timing bien précis, je vous dis bon courage ! Mais quand on y arrive et qu'on peut voire après plusieurs centaines de tentatives que ça rentre parfaitement, là c'est que du bonheur !
Allez attachez vos ceintures, ouvrez grand vos yeux, bienvenue dans un monde qui vous fait tourner la tête !
Pré-requis
Avant toute chose, je vous conseille d’avoir lu les tutoriels suivants, si ce n’est pas le cas, cliquez dessus et vous y serez redirigés. Il ne faut pas brulé les étapes.
- Le xml pour les nuls : Pour comprendre les bases du xml
Balise animation.
Comme pour toutes les animations, toutes les informations que nous allons rentrer seront contenues dans les balises suivantes.
- Code:
<animation>
### Les informations sont ici ###
</animation>
- Les objets concernés
Vous devez définir dans la balise suivante, le nom de l'objet qui va subir la rotation.
- Code:
<object-name>nomobjet</object-name>
Il est également possible d'indiquer plusieurs objets, tout simplement en énonçant lignes après lignes leurs nom.
- Code:
<object-name>objet1</object-name>
<object-name>objet2</object-name>
Si vous devez à nombreuse reprise animer plusieurs objets, il vous est possible au préalable de créer un groupe d'objets et de leur donner un nom. Regardez, la balise name permet de donner le nom du groupe, tout les objets situez en dessous en font parti. Ici, je vous propose un exemple concret avec un train d'atterrissage
- Code:
<animation>
<name>Train</name>
<object-name>Roue</object-name>
<object-name>amortisseur</object-name>
<object-name>vérin</object-name>
<object-name>jambe</object-name>
</animation>
Attention : les groupes doivent être créés en dehors des autres animations, il est préférable de les placer au début des fichier xml, à la suite des autres si il y en a déjà.
Il vous suffira enfin de rentrer le nom du groupe dans le object-name, soit :
- Code:
<object-name>Train</object-name>
- Ou trouver les noms des objets ?
Tout simplement dans blender, après avoir importé le fichier 3D , touche « n », sélectionnez l'objet dont vous souhaitez connaître le nom exact et il s'affichera ici (dans les versions de blender supérieure à 2.5) :
Type
Il faut ensuite définir le type d'animation que vous souhaitez faire. Ceux qui on un minimum suivi savent que nous parlons de rotations, donc il nous suffit d'entrer « rotate », regardez par vous-même :
- Code:
<type>rotate</type>
La propriété : qu'est-ce qui cause cette rotation ?
Comme il a été dit dans beaucoup de tuto, dans Flightgear tout est défini par des propriétés. Ces propriétés sont des variables que l'on fait évoluer en temps réel lors de notre vol. Si je tire le manche sur la droite, je vais agir sur la propriété (controls/flight/aileron). Celle-ci va changer de valeur ce qui va automatiquement se répercuter sur l'animation des ailerons, en effet ceux-ci varient en fonction de cette propriétés.
Donc il faut définir pour quelle raison votre objet va bouger, ceci se fait dans les balises property :
- Code:
<property>controls/flight/flaps</property>
Pour info, la propriété ci dessus est celle qui gère les volets. Elle est donc notamment utilisée dans l'animation de ceux-ci.
- Ou trouver les propriétés ?
Figurez vous qu'il existe dans Flightgear une petite fenêtre bien pratique qui vous sert à afficher les propriétés et leurs valeurs : Debug > browse internal property
Voilà sa petite frimousse :
Angle de rotation.
Jusque là, s'était de la rigolade, nous entrons dans le vif du sujet. Alors je dis angle de rotation même si celles-ci n'en ont pas toujours. Je m'explique : prenez un altimètre, l'aiguille va faire un grand nombre de tours, il n'y a pas vraiment de maximum et de minimum. Maintenant prenez un anémomètre, l'aiguille ici part du 0 pour aller à une valeur maxi.
Je vais vous présenter deux manières de définir l'angle d'une rotation, on va commencer par factor, balise toute simple mais qui lorsqu'on l'accompagne de ses petites sœurs, risque de vous faire chauffer la cervelle. Lorsque l'utilisation de la balise factor devient complexe, vous comprendrez qu'il y a une autre méthode possible, plus simple : l'interpolation
- Factor
Alors lorsque nous somme dans le cas d'une rotation, le factor va vous permettre de définir un angle de rotation :
- Code:
<factor>18</factor>
Ici la rotation fera 18°, on peut imaginer cet angle de rotation pour un aileron. Mais attention, cet angle est en positif et en négatif ! Du coup, notre aileron fera un angle de +18° dans un sens et de -18° dans l'autre. Du coup le mouvement de l'aileron se fait 36°.
Si votre animation est inversée, il vous suffit de changer le signe, soit :
- Code:
<factor>-18</factor>
Pour ce qui est d’un instru comme l’altimère, vous verrez que les choses sont un peu différentes, il n’y a pas d’angles fini, vous définissez un angle/pieds si vous voulez. Les factor prend des valeurs comme 0.36 (et oui un tour fait 360°, un tour fait 1000 pieds, donc 1 pied fait 0.36°)
- Compliquons un peu les choses.
La balise offset-deg permet de démarrer l’animation suivant une autre valeur de la propriété, vous allez comprendre tout ça d’ici quelques lignes.
- Code:
<offset-deg>-0.01</offset-deg>
Attention, le offset-deg doit être inséré après le factor.
La balise max et min vous permet de définir une valeur maximum et minimum à votre rotation. Imaginez que votre objet doit plus tourner d’un côté que de l’autre, la balise factor le fera tourner d’un même angle de droite à gauche, vous insérez vos valeurs maximum et minimum et le tour est joué.
- Code:
<min> 0 </min>
<max> 90 </max>
- Exemple : Train d’atterrissage Cessna 310
J’ai repris cet exemple de la doc flightgear que vous possédez tous (Flightgear/data/Docsmodel-howto.html), mais que beaucoup ne pense même pas à regarder malheureusement.
- Code:
<animation>
<type>rotate</type>
<object-name>NoseWheel</object-name>
<property>gear/gear[0]/position-norm</property>
<factor>120</factor>
<offset-deg>-1</offset-deg>
<min>-90</min>
<max>0</max>
<center>
<x-m>-2.28</x-m>
<y-m>0.0</y-m>
<z-m>-0.65</z-m>
</center>
<axis>
<x>0</x>
<y>1</y>
<z>0</z>
</axis>
</animation>
Une petite explication s’impose :
Je passe les première lignes pour arriver directement à property, la propriété en question ici est (gear/gear[0]/position-norm). Cette propriété ne prend que deux valeurs : 0 ou 1 (0= train rentré 1=train sorti).
Voici un petit tableau récapitulatif :
Par défaut, lorsque vous lancez votre avion, le train est heureusement sorti. Ceci explique pourquoi l’auteur à mis ce offset de -1. L’animation démarre à -1 et finit à 0. Le choix aurait pu être plus judicieux, mais là n’est pas la question, regardons la suite. Vous constaterez qu’il y a une valeur minimum pour la rotation de -90 alors que le factor est à 120. Ce qu’il faut comprendre c’est que le train ne bougera pas tant que le factor ne sera pas arrivé à -90. En d’autres termes, au début il ne se passe rien ! Du moins, rien du côté du train, et oui, pendant ce temps, les portes s’ouvrent.
La suite vous pouvez la deviner, arrivé à 50% de la rentrée du train (propriété = 0.5) le le train est passé à -50 et a donc tourné de 40°. Ainsi de suite jusqu’à la rentré totale du train.
Voilà, je donne cet exemple pour vous donner une idée de ce qui est possible de faire, mais cette programmation est simplifiable par l’utilisation de l’interpolation.
- L’interpolation
Derrière ce très joli nom, se cache un outil plutôt pratique dans certains cas. L’interpolation permet d’attribuer une valeur, ici une rotation, en fonction de la valeur que prend la propriété. Je m’explique :
« Quand le train est rentré est 50%, la rotation doit être arrivé à -50 » (pour l’exemple ci-dessus.)
Voilà comment ça se traduit en xml:
- Code:
<interpolation>
<entry><ind> 0.5 </ind><dep> -50 </dep></entry>
</interpolation>
Lorsque l’on fait des textures en photo réaliste, la symétrie de la texture n’est pas forcément exacte (éventuels effet de perspective), regardez ce que ça donne pour le badin du DC3
- Code:
<interpolation>
<entry><ind> 0 </ind><dep> 0 </dep></entry>
<entry><ind> 40 </ind><dep> 15 </dep></entry>
<entry><ind> 100 </ind><dep> 93 </dep></entry>
<entry><ind> 140 </ind><dep> 162 </dep></entry>
<entry><ind> 180 </ind><dep> 231 </dep></entry>
<entry><ind> 250 </ind><dep> 302 </dep></entry>
<entry><ind> 300 </ind><dep> 343 </dep></entry>
</interpolation>
Comme vous pouvez le voire, à chaque vitesse correspond une rotation de l’aiguille.
Une interpolation bien maîtrisée peut vous permettre de faire de très belles choses, vous pouvez réalisés de magnifiques animations de train d'atterrissage avec des vitesse de rotation variables et un timing parfait.
Les axes de rotation
On passe maintenant à la dernière partie de ce tutoriel, définir un axe de rotation. Avant toute chose, il faut savoir par rapport à quoi vous vous basez, tout sera en fonction du fichier 3D chargé en début du xml (éviter les erreurs cités dans le tuto « récupération de cordonnées). Là encore il y a plusieurs manières de faire, accrochez vous bien car au totale il y en a trois ! Je vais vous expliquer comment ça fonctionne et quand les utiliser.
- Axe simple
Très utilisé pour les instruments, il se présente de la manière suivante :
- Code:
<axis>
<x> 1 </x>
<y> 0 </y>
<z> 0 </z>
</axis>
Lorsque vous trouvez ces lignes, ceci veux dire qu’on utilise les axes de l’origine du repère. Importez la modélisation dans blender et ce sont ces axes que vous verrez en bleu (z) et vert (y) et en rouge (x).
Regardez de plus près le code. Seul le x prend la valeur 1, les autres sont à 0. Ceci veut dire que la rotation se fera autour de l’axe des x, si y valait 1 la rotation se ferait autour de l’axe des y, enfin vous avez compris …
Vous pouvez aussi attribuer une valeur à plusieurs axes, x=1 et y=1, dans ce cas, l’axe de rotation sera oblique (axe à 45°). Vous pouvez encore mettre des valeurs plus grandes sur certains axes, x=2 et y=1, ce qui aura aussi pour effet d’avoir un axe de rotation oblique mais ici, il sera plus proche de l’axe des x.
Vous comprendrez que ça devient compliqué, si on cherche à définir un axe oblique présent dans les 3dimentions, ça devient même totalement impossible à faire, dans ces cas là, il faut utiliser une autre méthode toute simple que je vous expliquerais plus loin.
Je voudrais maintenant vous invitez à réfléchir avant de vous lancer dans des modélisations. Prenons par exemple un manche. Si vous avez un minimum réfléchit, vous l’aurez modélisé en pensant à placer le bas du manche (là ou se trouve la rotule si vous voulez) au centre des axes, à la coordonnée (0,0,0), ce qui va vous simplifier énormément la vie car vous utiliserez le code ci-dessus pour l’animer. Même chose pour les instruments. Vous remarquerez en important un altimètre ou encore un badin qu’ils sont parfaitement centrés dans blender, le centre correspond parfaitement à la zone ou l’aiguille tourne.
- Définir un nouvel axe
Imaginons que la zone de rotation ne se trouve pas au centre des axes, mais que celle-ci reste simple. En effet celle-ci n’est pas oblique mais tourne autour d’un axe parallèle à notre x y ou z précédent. Et bien figurez-vous qu’il vous est possible de définir un nouvel axe. Il vous faut faire deux choses, indiqué le centre de cet axe, puis comme ci-dessus, indiquer l’axe de rotation. Regardez par vous-même :
- Code:
<center>
<x-m> 0 </x-m>
<y-m> 1.5 </y-m>
<z-m> 0 </z-m>
</center>
<axis>
<x> 1 </x>
<y> 0 </y>
<z> 0</z>
</axis>
Ici, l’axe de rotation sera décalé de 1.5m (et oui, les coordonnées sont en mètre) et l’objet tourne autour de l’axe des x.
- Exemple d’utilisation :
Regardez cet indicateur de température d’huile (du DC3)
Comme vous pouvez le voire, les aiguilles sont toutes les deux sur les côtés, on est donc obligé de définir les axes suivant :
Côté gauche
- Code:
<center>
<x-m> 0 </x-m>
<y-m> -0.015 </y-m>
<z-m> 0 </z-m>
</center>
<axis>
<x> -1 </x>
<y> 0 </y>
<z> 0 </z>
</axis>
Côté droit
- Code:
<center>
<x-m> 0 </x-m>
<y-m> 0.015 </y-m>
<z-m> 0 </z-m>
</center>
<axis>
<x> -1 </x>
<y> 0 </y>
<z> 0 </z>
</axis>
Vous remarquerez que les coordonnés sont symétriques par rapport à l’axe z (logique non ?)
- Rotation obliques
Je vous parlais à l’instant de rotation obliques, et bien ne vous embêtez pas à en faire avec les méthodes précédentes, vous vous compliquez la vie et vous risquer de vous arracher les cheveux. Il existe une méthode pour définir un axe très précisément et prenant des directions à vos souhaits. Elle consiste tout simplement à donner les cordonnées de deux points. Ces deux points forme un segment, le segment fait parti de la droite et la droite est votre axe ! Regardez cet exemple :
- Code:
<axis>
<x1-m>18.28</x1-m>
<y1-m>-21.55</y1-m>
<z1-m>-0.37</z1-m>
<x2-m>22.51</x2-m>
<y2-m>-28.37</y2-m>
<z2-m>0.08</z2-m>
</axis>
Vous remarquerez que j’ai séparé ces lignes en deux, les trois premières lignes sont les coordonnés du premier point (x1 ;y1 ;z1) et les trois dernières lignes sont les coordonnées du deuxième point (x2 ;y2 ;z2)
L'ordre des animations
Ici je parle bien d'animations, pas seulement de rotation. En effet on peut parfois avoir un mélange de rotations et de translations, on peut avoir pas mal d'animations différentes sur un même objet :
- La roue tourne autour de son axe lorsque l'avion roule.
- L'avion entame un virage et fait donc tourner la roue autour d'un autre axe.
Ce qu'il faut savoir, c'est qu'il y a un ordre dans les animations. Si dans cet exemple, on réalise la première animation (roue qui tourne autour de son axe) avant la deuxième (axe de la direction), et bien le résultat ne sera pas beau à voir ! Dans ce cas, lorsque vous agirez sur la direction, l'axe de rotation de la roue restera inchangé alors que la roue elle même à changé de place ! En inversant l'ordre des deux rotations, le problème est résolu.
Gardez ceci en tête :
Plusieurs animations sur un même objet : Toute animation est incluse dans la précédente.
Voici une petite explication toute simple de run qui devrait vous permettre de comprendre définitivement l'importance de l'ordre des animations :
Voici un parallélépipède où l'on appliquera deux rotations de 90 degrés une d'axe Z l'autre d'axe Y
Forme de départ
Rotation d'axe Z puis rotation d'axe Y
La même forme de départ
Rotation d'axe Y puis rotation d'axe Z
On s'aperçoit que l'objet final n'est pas positionné de la même manière.
Lancez-vous !
Voilà le tutoriel se termine ici, vous êtes maintenant parfaitement capable de faire des rotations dans Flightgear, il ne vous reste qu'une chose à faire : vous entraîner ! regardez aussi les choses existantes, vous verrez sans doutes des manières de voire les choses que vous n'auriez même pas imaginées.
n'hésitez pas à me fait part de vos commentaires sur ce tutoriel (vous ne comprenez pas quelque chose ?), ceci me permettrait de l'améliorer.
- Dernières recommandations
Outre le fait de vous entraîner, n'hésitez pas à travailler avec les xml existant. Vous éviterez ainsi les erreurs de frappe. Pensez aussi à bien présenter vos xml pour qu'ils soit agréables à lire.
- copier : Ctrl+c
- couper : Ctrl+x
- coller : Ctrl+v
Applications
Très prochainement, je vous ferais des applications sur les rotations vous expliquant comment réaliser un instru, animer une partie de l'avion ect...
Et au travail, des centaines d'avions vous attendent. !
Retrouvez tous les autres tutoriels concernant le développement de FG ici
Dernière édition par Alexis le Dim 30 Oct 2011 - 18:51, édité 4 fois
Re: Cours : Les rotations dans Flightgear
Une fois de plus très clair et facilement compréhensible, merci Alexis.
Bon, je vais boire une petite mousse, histoire de faire une "rotation", ça aide à digérer.
Bon, je vais boire une petite mousse, histoire de faire une "rotation", ça aide à digérer.
Re: Cours : Les rotations dans Flightgear
Ouiap du beau boulot
J'attends avec impatience le prochain... sur les Translate peut être.....
enfin je dis cela parce que le principe des x1-m/y1-m/z1mm - x2-m/y2-m/z2-m ne fonctionne pas avec les translate. Et comme le script de Melchior qui permet d'exporter les bonnes valeurs ne fonctionne pas avec Blender 2.58 je suis impatient de voir les quelques notions de math et de trigo qui vont apparaître
Courage
Amicalement Emmanuel
J'attends avec impatience le prochain... sur les Translate peut être.....
enfin je dis cela parce que le principe des x1-m/y1-m/z1mm - x2-m/y2-m/z2-m ne fonctionne pas avec les translate. Et comme le script de Melchior qui permet d'exporter les bonnes valeurs ne fonctionne pas avec Blender 2.58 je suis impatient de voir les quelques notions de math et de trigo qui vont apparaître
Courage
Amicalement Emmanuel
Re: Cours : Les rotations dans Flightgear
Salut messieurs,
D'abord, je voulais vous remercier pour vos compliments.
En fait, je suis très étonné, d'habitude je suis jamais content de ce que je fais, mais là je me surprend a être plutôt content de ce que j'ai rédigé. Peut-être que je vais modifier quelques tournures de phrases, mais dans l'ensemble c'est pas trop mal. C'est quand même mieux que les quelques lignes qu'on trouve sur le wiki anglais.
Helijah, tu as tout compris, le prochain sera sur les translations, étant assez connaisseur en trigonométrie, si vous voulez avoir un cours de math en plus, ça va le faire (j'imagine faire une l'application avec l'animation d'un levier relié a une tige comme on peut le voire dans les warbird, la translation doit bien tomber avec la rotation). Enfin, juste avant, je vais faire quelques application sur les rotation.
Autre chose avant de me lancer dans les translations, je dois faire tout un travail de recherche et de test (comme j'ai pu le faire pour les rotations), pour essayer de prendre connaissance de toutes les possibilités, mais aussi des erreurs possibles qu'un débutant peut faire. Comme j'ai beaucoup moins fait de translations, je vais plus taffer mais je vais essayer de sortir ce genre de tuto
D'ici quelques temps, je vais sortir un nombre de tuto conséquent, l'idée que j'ai derrière la tête c'est qu'un certain nombre de personnes se mettent a faire des contribs. Et des contrib de qualité qui ne nécessite pas de grosses modif (d'ou mon acharnement a détailler). Tout ça pour qu'on puisse un jour voire que des avions très avancés dans le hangar d'helijah et de tous les autres auteurs.
Sur ce merci à tous !
D'abord, je voulais vous remercier pour vos compliments.
En fait, je suis très étonné, d'habitude je suis jamais content de ce que je fais, mais là je me surprend a être plutôt content de ce que j'ai rédigé. Peut-être que je vais modifier quelques tournures de phrases, mais dans l'ensemble c'est pas trop mal. C'est quand même mieux que les quelques lignes qu'on trouve sur le wiki anglais.
Helijah, tu as tout compris, le prochain sera sur les translations, étant assez connaisseur en trigonométrie, si vous voulez avoir un cours de math en plus, ça va le faire (j'imagine faire une l'application avec l'animation d'un levier relié a une tige comme on peut le voire dans les warbird, la translation doit bien tomber avec la rotation). Enfin, juste avant, je vais faire quelques application sur les rotation.
Autre chose avant de me lancer dans les translations, je dois faire tout un travail de recherche et de test (comme j'ai pu le faire pour les rotations), pour essayer de prendre connaissance de toutes les possibilités, mais aussi des erreurs possibles qu'un débutant peut faire. Comme j'ai beaucoup moins fait de translations, je vais plus taffer mais je vais essayer de sortir ce genre de tuto
D'ici quelques temps, je vais sortir un nombre de tuto conséquent, l'idée que j'ai derrière la tête c'est qu'un certain nombre de personnes se mettent a faire des contribs. Et des contrib de qualité qui ne nécessite pas de grosses modif (d'ou mon acharnement a détailler). Tout ça pour qu'on puisse un jour voire que des avions très avancés dans le hangar d'helijah et de tous les autres auteurs.
Sur ce merci à tous !
Re: Cours : Les rotations dans Flightgear
hé hé aucun soucis pour les cours de trigo
Sinon je pensais pour les rotations tu as oublié un petit quelque chose qui m'a souvent bloqué
L'ordre des rotations. En effet si tu regardes, par exemple, le train principal de l'Alphajet tu verras que la rentrée se fait via 3 rotations simultanées.
La première sur Y, la seconde sur Z et la troisième sur X. Comme la plage d'interpolation est la même (mais pas les angles bien sur), l'animation final est fluide et on ne voit pas les trois phases (elle sont faites en même temps).
Mais, car c'est là que le "MAIS' apparaît. Si tu modifies l'ordre (genre Z puis X puis Y ou X puis Z puis Z ) l'animation n'est plus du tout la même et les roues ne seront pas au bon endroit à la fin de la rentrée . Certes j'aurais pu faire un peu de trigo et faire un axe oblique. Mais le mélange de rotation sur plusieurs donne le même résultat si l'on ne se mélange pas dans l'ordre des rotations
Voilà voilà
Amicalement Emmanuel
Sinon je pensais pour les rotations tu as oublié un petit quelque chose qui m'a souvent bloqué
L'ordre des rotations. En effet si tu regardes, par exemple, le train principal de l'Alphajet tu verras que la rentrée se fait via 3 rotations simultanées.
La première sur Y, la seconde sur Z et la troisième sur X. Comme la plage d'interpolation est la même (mais pas les angles bien sur), l'animation final est fluide et on ne voit pas les trois phases (elle sont faites en même temps).
Mais, car c'est là que le "MAIS' apparaît. Si tu modifies l'ordre (genre Z puis X puis Y ou X puis Z puis Z ) l'animation n'est plus du tout la même et les roues ne seront pas au bon endroit à la fin de la rentrée . Certes j'aurais pu faire un peu de trigo et faire un axe oblique. Mais le mélange de rotation sur plusieurs donne le même résultat si l'on ne se mélange pas dans l'ordre des rotations
Voilà voilà
Amicalement Emmanuel
Re: Cours : Les rotations dans Flightgear
Ah oui effectivement, ça m'a effleuré l’esprit pendant que j'écrivais. J'avoue que j'ai totalement oublié d'en parler. Mais je voulais justement interroger un connaisseur là dessus.
Je me souviens lorsque j'ai réalisé l'animation du train arrière du mirage F1 et que j'avais eu des soucis. Je ne sais pas si tu t'en rappel helijah, mais celui-ci est plutôt complexe, d'ailleurs les ingénieurs qui ont pondu cette merveille de train se sont vraiment tirés les cheveux. Alors que j'étais sûr que mes animations étaient bonnes, dans FG, ça déconnait, ça partait dans tout les sens. Quelqu'un m'a aidé sur jabber (je sais pas si s'était xiii, toi, jano ou Guillaume, me souviens plus) et m'a dit que les animations étaient effectués dans un certain ordre.
Peux-tu me rappelé un peu comment tout ça se passe exactement, moi je pensais que le fichier xml était lu de bas en haut et que les objets animés sur les animations du bas, seront en plus animé par celles du haut, les deux anim se font en même temps et il n'y a aucun soucis. Tu parle d'axe Y Z puis X, mais si on utilise des axes de rotations qui passent par les 3 dimensions ?
Une petite explication s'impose (d'ailleurs, je ne crois pas qu'on parle d'ordre des animations sur le wiki), ça va me permettre d’améliorer mon tuto
Je me souviens lorsque j'ai réalisé l'animation du train arrière du mirage F1 et que j'avais eu des soucis. Je ne sais pas si tu t'en rappel helijah, mais celui-ci est plutôt complexe, d'ailleurs les ingénieurs qui ont pondu cette merveille de train se sont vraiment tirés les cheveux. Alors que j'étais sûr que mes animations étaient bonnes, dans FG, ça déconnait, ça partait dans tout les sens. Quelqu'un m'a aidé sur jabber (je sais pas si s'était xiii, toi, jano ou Guillaume, me souviens plus) et m'a dit que les animations étaient effectués dans un certain ordre.
Peux-tu me rappelé un peu comment tout ça se passe exactement, moi je pensais que le fichier xml était lu de bas en haut et que les objets animés sur les animations du bas, seront en plus animé par celles du haut, les deux anim se font en même temps et il n'y a aucun soucis. Tu parle d'axe Y Z puis X, mais si on utilise des axes de rotations qui passent par les 3 dimensions ?
Une petite explication s'impose (d'ailleurs, je ne crois pas qu'on parle d'ordre des animations sur le wiki), ça va me permettre d’améliorer mon tuto
Dernière édition par Alexis le Mar 10 Juil 2012 - 0:36, édité 1 fois
Re: Cours : Les rotations dans Flightgear
C'est très bien fait alexis.
Sache que les rotations dans l'espace sont les bases pour pouvoir programmer les cartes graphiques. Tous mes cours de math y passent et même plus. Il y a énormément de choses dans la géométrie vectorielle, du genre
http://jeux.developpez.com/faq/math/?page=transformations#Q34
L'ordre des rotations est fondamental, car la composition de rotation n'est pas commutatif.
Un dessin vaut mieux qu'un long discours.
Voici un parallélépipède où l'on appliquera deux rotations de 90 degrés une d'axe Z l'autre d'axe Y
Forme de départ
Rotation d'axe Z puis rotation d'axe Y
La même forme de départ
Rotation d'axe Y puis rotation d'axe Z
On s'aperçoit que l'objet final n'est pas positionné de la même manière.
A+
Sache que les rotations dans l'espace sont les bases pour pouvoir programmer les cartes graphiques. Tous mes cours de math y passent et même plus. Il y a énormément de choses dans la géométrie vectorielle, du genre
http://jeux.developpez.com/faq/math/?page=transformations#Q34
L'ordre des rotations est fondamental, car la composition de rotation n'est pas commutatif.
Un dessin vaut mieux qu'un long discours.
Voici un parallélépipède où l'on appliquera deux rotations de 90 degrés une d'axe Z l'autre d'axe Y
Forme de départ
Rotation d'axe Z puis rotation d'axe Y
La même forme de départ
Rotation d'axe Y puis rotation d'axe Z
On s'aperçoit que l'objet final n'est pas positionné de la même manière.
A+
_run_- Le baron rouge
- Messages : 433
Date d'inscription : 10/06/2011
Re: Cours : Les rotations dans Flightgear
Merci rené,
ça fait plaisir d'avoir de bonnes appréciations de programmeurs (toi ou Msieur helijah d'ailleurs), ça veut dire que ne ne dit pas trop de bêtises !
effectivement l'ordre des rotations est importante, mais ma question persiste : comment les animations sont lus par le simulateur ? les rotations sont pas toujours suivant un axe. On peut avoir plusieurs rotation suivant des axes plus complexe, dans ce cas comment ça fonctionne ? est-ce comme je l'ai expliqué précédemment ?
[quote="Alexis"]
moi je pensais que le fichier xml était lu de bas en haut et que les objets animés sur les animations du bas, seront en plus animé par celles du haut, les deux anim se font en même temps et il n'y a aucun soucis. Tu parle d'axe Y Z puis X, mais si on utilise des axes de rotations qui passent par les 3 dimensions ?
[quote]
je me cite moi même, roh c'est une première.
Ahh ! rené, les matrice de rotation et compagnie, ça m'a bien occupé pendant les cours lol
ça fait plaisir d'avoir de bonnes appréciations de programmeurs (toi ou Msieur helijah d'ailleurs), ça veut dire que ne ne dit pas trop de bêtises !
effectivement l'ordre des rotations est importante, mais ma question persiste : comment les animations sont lus par le simulateur ? les rotations sont pas toujours suivant un axe. On peut avoir plusieurs rotation suivant des axes plus complexe, dans ce cas comment ça fonctionne ? est-ce comme je l'ai expliqué précédemment ?
[quote="Alexis"]
moi je pensais que le fichier xml était lu de bas en haut et que les objets animés sur les animations du bas, seront en plus animé par celles du haut, les deux anim se font en même temps et il n'y a aucun soucis. Tu parle d'axe Y Z puis X, mais si on utilise des axes de rotations qui passent par les 3 dimensions ?
[quote]
je me cite moi même, roh c'est une première.
Ahh ! rené, les matrice de rotation et compagnie, ça m'a bien occupé pendant les cours lol
Re: Cours : Les rotations dans Flightgear
Alexis a écrit:comment les animations sont lus par le simulateur ? les rotations sont pas toujours suivant un axe. On peut avoir plusieurs rotation suivant des axes plus complexe, dans ce cas comment ça fonctionne ? est-ce comme je l'ai expliqué précédemment ?
Dans l'espace les rotations se font toujours autour d'un axe. On dit un axe de rotation, et il peut être quelconque. Attention à ne pas confondre avec un axe de repère.
Les rotations dans l'espace ont besoin d'un vecteur, et d'un point (espace affine). Tu as bien formulé la chose. Pour l'ordre des rotations, il faut faire des tests et tu regardes le résultat. Je ne connais pas grand chose à fgfs.
Mais il y a une contrainte dans l'utilisation des formules mathématique. Les cartes graphiques utilisent le calcul matriciel, pour calculer la position de chaque point dans l'espace. A chaque transformation est associé une matrice, et on utilise le calcul sur les matrices pour appliquer les transformations. Or l'ordre s'inverse avec le calcul matriciel.
Par exemple :
Tu translates puis tu fais une rotation.
Cela revient à multiplier la matrice de rotation par la matrice de translation.
L'ordre est inversé. C'est pourquoi tu as l'impression que le fichier xml est lu à l'envers.
Je te rassure il est lu de haut en bas. Mais le calcul matriciel inverse l'ordre des transformations. Il faut en tenir compte.
_run_- Le baron rouge
- Messages : 433
Date d'inscription : 10/06/2011
Re: Cours : Les rotations dans Flightgear
D'accord !
Je comprend mieux, d'ailleurs pour les plus jeunes que moi, ne laissez pas tomber les maths, ça risque de vous servir !
D'ici demain ou plus tard, je vais ajouter un paragraphe sur ceci, Par la même occasion, je vais faire quelques test pour comprendre définitivement comment disposer les anim
Je comprend mieux, d'ailleurs pour les plus jeunes que moi, ne laissez pas tomber les maths, ça risque de vous servir !
D'ici demain ou plus tard, je vais ajouter un paragraphe sur ceci, Par la même occasion, je vais faire quelques test pour comprendre définitivement comment disposer les anim
Re: Cours : Les rotations dans Flightgear
_run_ a écrit:
Je te rassure il est lu de haut en bas. Mais le calcul matriciel inverse l'ordre des transformations. Il faut en tenir compte.
Haaa, enfin, je comprends la raison de ces nombreuses poussées de boutons qui accompagnent systématiquement le mélange de translations et rotations.
Merci _run_ !!!
xiii- OVNI
- Messages : 9
Date d'inscription : 05/03/2009
Re: Cours : Les rotations dans Flightgear
merci Alexis pour ce tuto fort clair et très bien écrit.
amicalement
georges
amicalement
georges
algajojo- Pilote de jet
- Messages : 775
Date d'inscription : 17/10/2010
Age : 66
Localisation : Chelles LFPH
Re: Cours : Les rotations dans Flightgear
Petite mise à jour du tutoriel avec l'ajout d'un paragraphe sur l'importance de l'ordre des animations. Il était grand temps de le faire !
Bonne lecture !
Bonne lecture !
Sujets similaires
» Développement de l'Akoya de LISA Airplanes
» Comment je met une ombre à mes avions dans FlightGear (shadow).
» Application : Les rotations pour les instruments
» Du traffic routier dans Flightgear
» Comment je crée des textures du sol dans FlightGear
» Comment je met une ombre à mes avions dans FlightGear (shadow).
» Application : Les rotations pour les instruments
» Du traffic routier dans Flightgear
» Comment je crée des textures du sol dans FlightGear
Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum