**Animator.pbi version 1.20 (15 Avril 2023)**
Download [[https://www.falsam.com/animator/Animator.zip|Animator.zip]] \\
:!: **Fonctionne à partir de PureBasic 6.01**
===== Qu'est ce que Animator.pbi ? =====
**Animator.pbi** est un module codé avec le langage **PureBasic** permettant de créer des **objets animés 3D (ou avatar) **. Chaque création pourra être sauvegarder au **format JSON**.
■ Un objet est représenté par une liste structurée récursive.
■ Un objet animé est défini par un ensemble de jointures reliées les unes aux autres.
Chaque jointure est liée aussi à une structure récursive.
■ Sur chaque jointure, vous ajouterez une ou plusieurs entités simples (//Cube, Sphere, etc ...//) ou des meshes OGRE3D. chaque entité peut être associé à un fichier .material ou à une couleur au format RGB/RGBA ou une texture.
■ Sur chaque jointure, Vous pourrez ajouter une ou plusieurs animations. Chaque animation est configurée avec une timeline composée de clés définissant la rotation et le déplacement.
===== Hello world=====
**Nous allons voir comment animer un cube qui monte et qui descend en effectuant une rotation sur l'axe y.
**
Insérer le module Animator.pbi au début de votre code.
XIncludeFile "Animator110.pbi"
UseModule Animator
Initialiser l'objet animée que vous souhaitez créer.
Define NewList Cube.NewSkeleton()
Insérons un joint au point de coordonnée 0,0,0 sur l'axe x,y,z.
Define j0 = AddJoin(Cube(), "Mon Cube", 0, 0, 0)
Ajouter un cube rouge sur les mêmes coordonnées que le join.
AttachJoinEntity(j0, "Cube", "rgb(255,0,0)", 0,0,0)
C'est le moment de créer une animation pour le join j0 que vous appellerez par exemple "run". Vous allez pour cela créer un **timeline** qui sera composé de deux clés : Une première clé pour indiquer au cube qu'il va monter d'une unité et faire une rotation de 90° et une seconde clé pour indiquer au cube qu'il va redescendre tout en continuant sa rotation de 90°.
If CreateJoinAnimation(j0, "run")
AddJoinKey(j0, "run", 0,90,0, 0,1,0)
AddJoinKey(j0, "run", 0,90,0, 0,-1,0)
EndIf
Votre animation est terminée. Vous pouvez la sauvegarder.
SaveSkeleton(cube(), "cube.json")
■ **Le code complet.**
EnableExplicit
XIncludeFile "Animator110.pbi" : UseModule Animator
Define NewList Cube.NewSkeleton()
Define j0 = AddJoin(cube(), "Mon Cube", 0, 0, 0)
AttachJoinEntity(j0, "Cube", "rgb(255,0,0)", 0,0,0)
If CreateJoinAnimation(j0, "run")
AddJoinKey(j0, "run", 0,90,0, 0,1,0)
AddJoinKey(j0, "run", 0,90,0, 0,-1,0)
EndIf
SaveSkeleton(cube(), "cube.json")
===== Voir le résultat=====
Charger le skeleton.
LoadSkeleton(cube(), "cube.json")
Jouer l'animation "run" avec un framerate de 120 images.
Playanimation(cube(), "run", 120)
■ **Le code complet.**
XIncludeFile "Animator110.pbi" : UseModule Animator
EnableExplicit
; Initialisation de l'objet ou avatar animé
Define NewList cube.NewSkeleton()
; Download du skeleton
LoadSkeleton(cube(), "cube.json")
; Rendu dans une scene 3D
InitEngine3D() : InitSprite() : InitKeyboard()
OpenWindow(0, 0, 0, 800, 600, "Hello World [Esc : Quitter]", #PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(0), 0, 0, 800, 600, 0, 0, 0)
; Lumière
CreateLight(#PB_Any, RGB(255, 255, 255), 100, 100, 0, #PB_Light_Point)
; Caméra
CreateCamera(0, 0, 0, 100, 100)
CameraBackColor(0, RGB(218, 165, 32))
MoveCamera(0, 2, 1, -2, #PB_Absolute | #PB_Local)
CameraLookAt(0, 0, 0.5, 0)
; Création de l'objet animé
CreateAvatar(cube() )
Repeat
While WindowEvent() : Wend
ExamineKeyboard()
; Jouer l'animation "run"
; framerate de 120 images pour chaque clé de l'animation
Playanimation(cube(), "run", 120)
RenderWorld()
FlipBuffers()
Until KeyboardReleased(#PB_Key_Escape)
===== Fonctionnalités =====
■ Fonctionnalités usuelles.
[[AddJoin|AddJoin() Ajouter un joint.]]\\
[[AttachJoinEntity|AttachJoinEntity() Attacher une entité à un joint.]]\\
[[CreateJoinAnimation|CreateJoinAnimation() Créer une animation associé à un joint.]]\\
[[AddJoinKey|AddJoinKey() Ajoute une clé à une animation.]]\\
[[CreateAvatar|CreateAvatar() Création 3D de l'objet animé.]]\\
[[GetMainJoinNode|GetMainJoinNode() Retourne le node du joint maitre.]]\\
[[PlayAnimation|PlayAnimation() Joue une animation .]]\\
[[SaveSkeleton|SaveSkeleton() Sauvegarder un skeleton au format JSON.]]\\
[[LoadSkeleton|LoadSkeleton() Télécharger un skeleton au format JSON.]]\\
[[ScaleSkeleton|ScaleSkeleton() Changer les dimensions d'un skeleton.]]\\
■ Les autres fonctionnalités.
[[GetAnimations|GetAnimations() Donner la liste des animations d'un skeleton.]]\\
[[CreateSkeletonBody|CreateSkeletonBody() Créer un impostor physique invisible.]]\\
[[FreeJoins|FreeJoins() Libèrer les joints d'un skeleton.]]\\
[[GetJoin|GetJoin() Faire une recherche d'un joint à partir d'un nom de join.]]\\
[[GetJoinParent|GetJoinParent() Faire une recherche d'un joint parent.]]\\
[[AnimationFinish|AnimationFinish() Tester si une animation est terminée.]]\\
[[EnableAnimation|EnableAnimation() Active une animation terminée.]]\\
[[FreeJoinsEntities|FreeJoinsEntities() Détruit les entités d'un skeleton.]] \\
[[AnimationResetKeys|AnimationResetKeys() Reset d'une animation.]] \\
//Cliquez sur la fonctionnalité que vous désirez voir.//