 -------------------
 MORPH ET ANIMATIONS
 -------------------

J'ai fait le basic en C, je pense que le reste devra tre fait en python



1) cration d'un MorphData
--------------------------

 partir d'un world qui contient d'autres worlds et des faces dont les vertices sont dans les diffrents worlds
en utilisant la fonction _to_morph():
> morph_data = world._to_morph()

pour connatre le nombre de faces d'un morph data:
> nb = morph_data.face_number



2) instanciation d'un Morph
---------------------------

> morph = soya.model.Morph(morph_data)

les sous mondes du morph sont des deep_copy des mondes contenus par le MorphData et sont accessibles par la liste:
> morph.children

le data correspondant  l'instance:
> morph_data = morph.data



3) animation des coordsys (world)
---------------------------------

il faut crer 1 _soya._AnimCoordsys par coordsys:
> anim = _soya._AnimCoordsys()

on additionne des states comme ceci (o time est un float):
> anim.add(coordsys, time)

on en enlve comme ceci:
> anim.remove(time)
> anim.remove(index)
(time est un float, index un int correspondant au state n de la liste ordonne par ordre de time croissant)

pour rcuprer le time du state index:
> time = anim.get_time_for(index)
pour dfinir le time du state index:
> anim.set_time_for(index, time)

pour connatre le nombre de state de l'animation:
> nb = anim.states_number

et pour setter/getter le cyclic lap:
> anim.cyclic_lap

pour placer un coordsys  un temps donn d'une animation donne on utilise:
> coordsys.set_anim_state(anim, previous_time, new_time)
o previous_time est le time du state courrant et new_time est le time du state  atteindre (float tous les 2)

previous_time est ignor si new_time est suprieur au plus petit time des states de anim
en fait previous_time sert  interpoler entre 2 animations diffrentes, exemple:
coordsys est dans n'importe qu'elle position de n'importe quelle animation. je veux que coordsys interpole vers
la position 1.0 qui est le 1er state de ma nouvelle animation anim. pour interpoler avec un pas de 0.5:
> coordsys.set_anim_state(anim, 0.0, 0.25)
> coordsys.set_anim_state(anim, 0.25, 0.5)
> coordsys.set_anim_state(anim, 0.5, 0.75)
> coordsys.set_anim_state(anim, 0.75, 1.0)

attention: si new_time est strictement suprieur au time maximum de l'animation plus le cyclic_lap, cela ne marche pas
(donc il faut rinitialiser le time quand on joue l'animation)


=>  faire en python:
l'diteur d'animation
rassembler les animations sur plusieurs coordsys soit un morph
les fonctions pour jouer les animations



4) animation sur la visibilit des faces
----------------------------------------

> morph.show_face(index)
> morph.hide_face(index)
videmment il est impossible de savoir quelle face correspond  quel index :(

> morph.enable_face(index)
> morph.disable_face(index)
ces fonctions ont une priorit suprieure aux prcdentes et ne sont pas  utiliser pour les animations mais pour
des trucs comme le dmembrement...


=>  faire en python:
les animations du type  tel time je veux telle face hidden ou showed en utilisant les fonctions show_face et hide_face
(facile  faire vu qu'il n'y a pas d'interpolation)



5) animation sur les materials
------------------------------

on peut remplacer un material par un autre (toutes les faces ayant le mme material changeront alors de material)
> morph.set_material(index, material)
pour rcuprer le material:
> material = morph.get_material(index)


=>  faire en python:
pareil que pour les animations sur la visibilit des faces



6) animation sur les vertices
-----------------------------

pas encore fait





PS :  propos des lands, il faudrait spcifier quelque part dans l'aide que la taille des lands doit tre du type
     (2 ^ n) + 1   (sinon je ne sais pas trop ce qui se passe...)
     de plus les valeurs de map_size sont strictement limites au suivantes: 
     2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048
     (map_size tant l'un des paramtres, avec split_factor, qui influent directement sur le FPS selon puissance de
     la carte 3D d'aprs moi -  grenoble c'est optimal pour map_size = 8 et split_factor = 4.0)


