Ceci est une ancienne révision du document !
Table des matières
Animator.pbi version 1.10 (7 Avril 2023)
Download Animator.zip
Ce fichier compressé contient la version 1.00 et 1.10 d'Animator
Qu'est ce que Animator.pbi ?
Animator.pbi est un module codé avec le langage PureBasic permettant de créer des objets animés chacun étant au format JSON.
■ Un objet est représenté par la liste structurée récursive NewSkeleton().
■ Un objet animé est défini par un ensemble de joints reliés les uns les autres. Chaque join est lié à la structure récursive NewSkeleton.
■ Sur chaque joint, on peut ajouter une ou plusieurs entité simple (Cube, Sphere, etc …) ou des meshes OGRE3D. chaque entité peut être associé à un fichier .material ou à une couleur ou une texture.
■ Sur chaque joint, on peut ajouter une ou plusieurs animation. 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.
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() Ajouter un joint.
AttachJoinEntity() Attacher une entité à un joint.
CreateJoinAnimation() Créer une animation associé à un joint.
AddJoinKey() Ajoute une clé à une animation.
CreateAvatar() Création 3D de l'objet animé.
GetMainJoinNode() Retourne le node du joint maitre.
PlayAnimation() Joue une animation .
SaveSkeleton() Sauvegarder un skeleton au format JSON.
LoadSkeleton() Télécharger un skeleton au format JSON.
ScaleSkeleton() Changer les dimensions d'un skeleton.
■ Les autres fonctionnalités.
GetAnimations() Donner la liste des animations d'un skeleton.
CreateSkeletonBody() Créer un impostor physique invisible.
FreeJoins() Libèrer les joints d'un skeleton.
GetJoin() Faire une recherche d'un joint à partir d'un nom de join.
GetJoinParent() Faire une recherche d'un joint parent.
Cliquez sur la fonctionnalité que vous désirez voir.