Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • Alexandre.Meyer/m1if37-animation
  • Alexandre.Meyer/m2-apprentissage-profond-image
  • Alexandre.Meyer/m2-animation
  • Alexandre.Meyer/hugo-web-minimal
  • Alexandre.Meyer/lifami
  • Alexandre.Meyer/lifapcd
  • Alexandre.Meyer/www
  • Alexandre.Meyer/lifstage
8 results
Show changes
Commits on Source (49)
Showing
with 478 additions and 214 deletions
# The Docker image that will be used to build your app
image: harbor.pagoda.os.univ-lyon1.fr/ecoquery-hugo/hugo:latest
pages:
script:
- hugo version
- cd web
- ls -la content
- hugo -v
- hugo list drafts
- mv public ../public
- ls -la ../public
- ls -la ../public/tags
# - ls -la ../public/page
- ls -la ../public/categories
- cat ../public/index.html
artifacts:
paths:
- public
only:
- main
# test:
# script:
# - pwd
# - cd web
# - hugo
# - mv public ../public
# - ls -la ..
# - ls -la ../public
# - chmod 755 ../public
# - chmod 644 ../public/index.html
# except:
# - main
# The Docker image that will be used to build your app
image: harbor.pagoda.os.univ-lyon1.fr/ecoquery-hugo/hugo:latest
pages:
script:
- hugo version
- cd web
- ls -la content
- hugo -v --gc
- hugo list drafts
- mv public ../public
- ls -la ../public
- ls -la ../public/tags
# - ls -la ../public/page
# - ls -la ../public/categories
# - cat ../public/index.html
artifacts:
paths:
- public
only:
- main
# test:
# script:
# - pwd
# - cd web
# - hugo
# - mv public ../public
# - ls -la ..
# - ls -la ../public
# - chmod 755 ../public
# - chmod 644 ../public/index.html
# except:
# - main
# Site web et ressources de l'UE UE M1if37 Animation en synthèse d'image
# Site web et ressources de l'UE de M2ID3D Animation, Corps Articulés Et Moteurs Physiques (3 ECTS)
[La page de l'UE est ici](http://alexandre.meyer.pages.univ-lyon1.fr/m1if37-animation/)
[La page de l'UE est ici](http://alexandre.meyer.pages.univ-lyon1.fr/m2-animation/)
## Explication de la génération
Le site web est désormais fabriqué par ```Hugo``` (thème [congo](https://jpanther.github.io/congo/)). les sources se trouvent dans le répertoire ```web```.
Le site web est mis à jour par intégration continue (CI/CD) à chaque fois que vous faites un push (rien besoin d'autre, à part attendre quelques secondes). Le script d'intégration continue est ```.gitlab-ci.yml```. Pour voir le résultat du script de génération, [allez ici](https://forge.univ-lyon1.fr/Alexandre.Meyer/m1if37-animation/-/jobs) ou depuis l'interface dans CI/Jobs.
Le site web est fabriqué par ```Hugo``` (thème [congo](https://jpanther.github.io/congo/)). les sources se trouvent dans le répertoire ```web```. Le site web est mis à jour par intégration continue (CI/CD) à chaque fois que vous faites un push (rien besoin d'autre, à part attendre quelques secondes). Le script d'intégration continue est ```.gitlab-ci.yml```. Pour voir le résultat du script de génération, [allez ici](https://forge.univ-lyon1.fr/Alexandre.Meyer/m2-animation/-/jobs) ou depuis l'interface dans CI/Jobs.
Le fichier ```site/config.toml``` permet de configurer la génération du site. Mais noramlement il n'y a pas besoin d'y toucher.
* Les pages web sont générées à partir du répertoire ```web/content```.
......@@ -18,12 +17,6 @@ Le fichier ```site/config.toml``` permet de configurer la génération du site.
* ```web/static``` : les fichiers autres (pdf, images, sujets, etc.) sont à ranger dedans. Par exemple, il y a
* ```web/static/images``` pour les images du site;
* ```web/static/doc``` documents généraux de l'UE;
* ```web/static/doc_controle``` documents de la partie contrôle (NP);
* ```web/static/doc_charanim``` documents de la partie personnage (AM);
## Si Fork
Par défaut, gitlba ajoute de '-' un peu partout, vous pouvez changer l'adresse web dans Settings/General/Advanced/Change path.
......@@ -36,5 +29,4 @@ Pour tester vos mises à jour en local :
Vous pouvez aussi essayer de contruire le site en static en faisant juste ```hugo``` : le site sera constuit dans le répertoire public.
Toutes les infos sont détaillées ici !
Pour convertir du DOKUWIKI en Markdown, on peut utiliser pandoc??? (todo) ou certains web en ligne.
Pour convertir du DOKUWIKI en Markdown, on peut utiliser pandoc??? (todo) ou certains web en ligne.
\ No newline at end of file
baseURL = "http://alexandre.meyer.pages.univ-lyon1.fr/m1if37-animation/"
title = "M1if37 Animation en synthèse d'images"
#theme = "etch"
#theme = "ucax"
#theme = "paige"
#theme = "hugo-flex"
theme = "congo"
languageCode = "fr-FR"
enableInlineShortcodes = true
pygmentsCodeFences = true
pygmentsUseClasses = true
publishDir = "public"
# [author]
# name = "Alexandre Meyer"
# image = "img/author.jpg"
# headline = "M1if37"
# bio = ""
[params]
description = "Animation en synthèse d'images"
copyright = ""
dark = "auto"
highlight = true
mainSections = "personnage;controle;posts"
#color = "gray" # Any color in CSS syntax
#width = "52rem" # Any length in CSS syntax
colorScheme = "fire"
# footer= ""
# rss = ""
article.showDate = false
# [[footer]]
# name = "Privacy"
# url = "https://external-link"
# - name: Aboutaaa
# url: about/
# weight: 1
[menu]
[[menu.main]]
identifier = "Physique"
name = "Physique"
title = "Physique"
url = "https://perso.liris.cnrs.fr/fzara/Web/M1Animation.html"
weight = 1
[[menu.main]]
identifier = "Personnage"
name = "Personnage"
title = "Personnage"
url = "/personnage/"
weight = 2
[[menu.main]]
identifier = "Controle"
name = "Controle"
title = "Controle"
url = "/controle/"
weight = 3
[permalinks]
posts = "/:title/"
[markup.goldmark.renderer]
# Allow HTML in Markdown
unsafe = true
[markup.tableOfContents]
ordered = true
baseURL = "http://alexandre.meyer.pages.univ-lyon1.fr/m2-animation/"
title = "M2ID3D Animation, corps articulé et moteur physique"
theme = "congo"
languageCode = "fr-FR"
enableInlineShortcodes = true
pygmentsCodeFences = true
pygmentsUseClasses = true
publishDir = "public"
[params]
description = "M2ID3D Animation, corps articulé et moteur physique"
copyright = ""
dark = "auto"
highlight = true
mainSections = "personnage;controle;posts"
#color = "gray" # Any color in CSS syntax
#width = "52rem" # Any length in CSS syntax
colorScheme = "fire"
# footer= ""
# rss = ""
article.showDate = false
favicon = "favicon.ico"
# [[footer]]
# name = "Privacy"
# url = "https://external-link"
# - name: Aboutaaa
# url: about/
# weight: 1
[menu]
[[menu.main]]
identifier = "Physique"
name = "Physique"
title = "Physique"
url = "https://perso.liris.cnrs.fr/florence.zara/Web/M2Animation.html"
weight = 1
[[menu.main]]
identifier = "Personnage"
name = "Personnage"
title = "Personnage"
url = "/personnage/"
weight = 2
[[menu.main]]
identifier = "Controle"
name = "Controle"
title = "Controle"
url = "/controle/"
weight = 3
[permalinks]
posts = "/:title/"
[markup.goldmark.renderer]
# Allow HTML in Markdown
unsafe = true
[markup.tableOfContents]
ordered = true
# Master 1 Informatique - UE M1if37 Animation en synthèse d'image (3 ECTS)
# Master 2 ID3D - Animation, Corps Articulés Et Moteurs Physiques (3 ECTS)
Responsables de l'enseignement : [Alexandre Meyer](
http://liris.cnrs.fr/alexandre.meyer), [Nicolas Pronost](
http://liris.cnrs.fr/nicolas.pronost) et [Florence Zara](
http://liris.cnrs.fr/florence.zara) - LIRIS, Université Lyon 1
Volume horaire : 10h30 CM, 19h30 TP
Volume horaire : 13h30 CM, 16h30 TP
![im_all.png](images/im_all.png)
<img src="images/simu.png" width="400" class="center">
## Objectif de l'UE
<p style="text-align:justify;">M1if37 est une UE optionnelle de la 1ère année du Master d'Informatique de l'Université Lyon 1. Les cours ont lieu au semestre 2 (printemps). L'objectif de l'UE est de donner les bases de l'animation en synthèse d'images. Nous aborderons les deux grandes familles de méthodes. L'animation basée sur des données, par exemple pour l'animation d'humain virtuel (données issues de capture de mouvement). Et l'animation basée sur un modèle physique pour la simulation de phénomènes naturels comme le mouvement de textiles ou de fluide. L'UE laissera une grande part à l'application pratique avec la réalisation de TPs en C++/OpenGL proposant d'animer par exemple des humains virtuels, des vêtements, des cordes, une surface d'eau, etc.</p>
[Les slides de la présentation des options sont ici.](doc/M1if37_PresOption.pdf)
<p style="text-align:justify;">Animation, Corps Articulés Et Moteurs Physiques (ACAMP) est une UE du tronc commun du Master 2e année ID3D de l'Université Lyon 1. Les cours ont lieu au à l'automne. L'objectif de l'UE est de donner les bases de l'animation en synthèse d'images. Nous aborderons les deux grandes familles de méthodes. L'animation basée sur des données, par exemple pour l'animation d'humain virtuel (données issues de capture de mouvement). Et l'animation basée sur un modèle physique pour la simulation de phénomènes naturels comme le mouvement de textiles ou de fluide. L'UE laissera une grande part à l'application pratique avec la réalisation de TPs en C++/OpenGL et avec Unity proposant d'animer par exemple des humains virtuels, des vêtements, des cordes, une surface d'eau, etc.</p>
## Thématiques abordées
### Animation par modèles physiques (F. Zara) - 4h30 CM, 6h30 TP
* Concepts physiques (forces, lois de Newton)
* Méthodes d'intégration numérique
* [La page web de cette partie](https://perso.liris.cnrs.fr/fzara/Web/M1Animation.html)
### Animation de personnage (A. Meyer) - 4h30 CM, 6h30 TP
* Animation basée squelette
* Déformation de maillage (skinning)
* [La page web de cette partie](https://perso.liris.cnrs.fr/alexandre.meyer/public_html/www/doku.php?id=charanim_m1#master_1_informatique_-_ue_m1if37_animation_en_synthese_d_image)
### Contrôle de mouvement (Nicolas Pronost) - 1h30 CM, 6h30 TP
* Mouvement d'objets rigides articulés
### Animation de personnage (A. Meyer) - 6h CM, 6h45 TP
* Cinématique directe et inverse
* Skinning
* Graphe d'animation et motion matching
* Apprentissage machine et animation
* [La page web de cette partie](personnage)
### Animation par modèles physiques (F. Zara) - 6h CM, 6h45 TP
* Dynamique Newtonienne
* Animaton d'objets déformables
* Dynamique des objets rigides
* Simulation de fluide
* Collisions
* [La page web de cette partie](https://perso.liris.cnrs.fr/florence.zara/Web/M2Animation.html)
### Contrôle de mouvement (Nicolas Pronost) - 1h30 CM, 3h TP
* Contrôle du mouvement d'objets rigides articulés
* [La page web de cette partie](controle)
## Emploi du temps 2023
## Emploi du temps 2023-2024
![documents/M1if37_edt.png](doc/M1if37_edt.png)
![doc/Emploi-du-temps.png](doc/Emploi-du-temps.png)
* Cours en salle TD10 Nautibus
* Cours en salle TD10 du bâtiment Nautibus
* TP en salles TP11, TP12 Nautibus
* TP en salles TP11, TP12 du bâtiment Nautibus
## Modalités de contrôle des connaissances (MCC)
* **1 note de CCF** portant sur les 3 parties du cours
* **3 notes de TP** : TP F. Zara, TP A. Meyer, TP N. Pronost (code + rapport + démo ou vidéo)
* **Dates des évaluations** :
* Examen écrit : mercredi 24 mai 2023 8h-9h30 en C3
* Démo de TP : mercredi 24 mai 2023, de 9h45 à 12h en TP11, TP12
* Date limite de rendu des 3 archives : mercredi 24 mai 2023 12h
* Examen écrit : vendredi 26 janvier 2024, 13h30-15h30 en salle ?? du bâtiment Nautibus
* Démo de TP : vendredi 26 janvier 2024, à partir de 15h45 en salles TP11 et TP12 du bâtiment Nautibus
* Date limite de rendu des 3 archives : vendredi 26 janvier 2024 à 16h
* **Modalité de rendu des TPs :** <p style="text-align:justify;">
* Une archive sera à déposer sur TOMUSS (dans les 3 colonnes correspondantes). Cette archive contiendra le code du TP + un rapport.
......
# Master 1 Informatique - UE M1if37 Animation en synthèse d'image (3 ECTS)
# Master 2 ID3D - Animation, Corps Articulés Et Moteurs Physiques (3 ECTS)
## Contrôle de mouvement
## Contrôle de mouvement (Nicolas Pronost)
Télécharger [les transparents du cours](../doc_controle/M1IF37_CM_CONTROLEUR.pdf)
Télécharger [les transparents du cours](../doc/doc_controle/M2ANIM_CM_CONTROLEUR.pdf)
Télécharger [l'énoncé du TP](../doc_controle/M1IF37_TP_CONTROLEUR.pdf)
Télécharger [l'énoncé du TP](../doc/doc_controle/M2ANIM_TP_CONTROLEUR.pdf)
Accéder [aux ressources pour le TP](../doc_controle/tp.zip)
Télécharger [le modèle pour le rapport](../doc_controle/M1IF37_TP_CONTROLEUR-modele_rapport.docx)
\ No newline at end of file
Accéder [aux ressources pour le TP](../doc/doc_controle/M2ANIM_TP_CONTROLEUR.zip)
---
title: ""
description: "Partie Animation de personnage"
---
# Partie Animation de personnage
* Alexandre Meyer
* 4h30 CM, 6h30 TP
* [L'ancienne page de cette partie](https://perso.liris.cnrs.fr/alexandre.meyer/public_html/www/doku.php?id=charanim_m1#master_1_informatique_-_ue_m1if37_animation_en_synthese_d_image)
![](../doc_charanim/charanim_tpose.jpg)
## Cours
* [Systèmes articulés : cinématique directe](https://perso.liris.cnrs.fr/alexandre.meyer/teaching/master_charanim/aPDF_COURS_M1/M1_1_SkeletonBasedAnimation.pdf)
* [Edition d'animations, Graphe d'animations](https://perso.liris.cnrs.fr/alexandre.meyer/teaching/master_charanim/aPDF_COURS_M1/M1_2_MotionControlAndEditing.pdf)
* [Capture de mouvements](https://perso.liris.cnrs.fr/alexandre.meyer/teaching/master_charanim/aPDF_COURS_M1/M1_3_MotionCapture.pdf)
## Les vidéos des 3 CM (2020)
[Les vidéos](video)
## Le TP
* [TP animation de personnage virtuel](tp)
* [[master_charanim_code|Le code initial]]
#### Rendu
Les archives sont à rendre sur TOMUSS
* TP Animation de personnage virtuel
* vous devez rendre une archive avec un readme.txt ou readme.md expliquant ce que vous avez fait et comment lancer le programme
* une VIDEO de DEMO ou une démo en LIVE
* Barème "Personnage"
* (5 points) TP 1ère partie : affichage d'une animation BVH
* (3 points) Contrôleur d'animation : la base (pilotage au clavier d'un déplacement)
* Machine à état (4 points maximum)
* basique : pour une machine à état de base avec 4 animations : iddle, marcher, courir, sauter ou kick
* avancé : une machine à état plus complète avec de nombreuses animations (une dizaine) : voir celles du répertoire motionGraph_second_life, etc.
* Motion Graphe (6 points max)
* basique : transition vers un autre animation en cherchant à la volée une transition compatible
* avancé : un motion graph construit automatiquement en pré-calcul (voir la fin de l'énoncé qui pointe vers un complément de sujet).
* (3 points) Interpolation entre 2 frames, à utilise pour les transitions ou pour une bonne gestion du temps
* (1 points) Collision entre personnage et sphères (voir le code PhysicalWorld)
* (1 points) bonus de qualité/cohérence de la scène
* Le total fait plus que 20 car les points FSM/graphe d'animation sont à comprendre avec un OU : la machine à état rapporte moins de points, car bien moins difficile.
---
title: "Animation de personnage"
---
<img src="doc/chara.jpg" width="400" class="center">
## Les Cours
#### (CM1) Systèmes articulés, cinématique directe et Quaternions
* [Cinématique Directe](doc/M1_1_SkeletonBasedAnimation.pdf)
* [Quaternion](doc/M2_1b_Quaternions.pdf)
Il y a des parties en commun avec le M1 mais il s'agit de la base ! En nouveauté : les quaternions et la prise en main d'Unity. Regardez également
* [cette vidéo interactive expliquants les quaternions;](https://eater.net/quaternions/video/intro)
* [ce web interactif de manipulation des angles d'Euler.](http://www.ctralie.com/Teaching/COMPSCI290/Materials/EulerAnglesViz/)
#### (CM2) Cinématique inverse et Animations procédurales
* IK : méthode géométrique, descente de gradient, optimisation avec le Jacobien, heuristique (CCD, FABRIK)
* Animations procédurales
[Le PDF du cours est ici.](doc/M2_2_CinematiqueInverseIK_ProceduralAnimation.pdf)
#### (CM3) Edition d'animations et contrôle d'un personnage (sans physique)
* Motion graphe
* Machine à état + blend (Unity)
* Motion matching
[Le PDF du cours est ici.](doc/M2_3_MotionControlAndEditing.pdf)
#### (CM4) Skinning
[Le PDF du cours est ici.](doc/M2_4_Skinning.pdf)
#### (CM5) Deep learning et animation
[Le PDF du cours est ici.](doc/M2_5_DeepLearning_Animations.pdf)
<img src="doc/chara_ik.jpg" width="400" class="center">
## TP Animation de personnage
* [TP1.a les bases d'Unity](doc/M2_TP1a_AnimPersonnageUnity_LesBases.pdf)
* [TP1.b MecANim](doc/M2_TP1b_AnimPersonnageUnity-MecAnim.pdf)
* [TP2 Cinématique inverse avec FABRIK](doc/M2_TP2_AnimPersonnageUnity-IK.pdf) (la partie importante du TP).
* Les 3 classes vides présentées dans le PDF
* [IK.cs](doc/M2_TP2_AnimPersonnageUnity-IK_classIK.cs)
* [IKJoint.cs](doc/M2_TP2_AnimPersonnageUnity-IK_classIKJoint.cs)
* [IKChain.cs](doc/M2_TP2_AnimPersonnageUnity-IK_classIKChain.cs)
### Notation
* Pas besoin de faire de rapport pour cette partie
* Les archives sont à rendre sur TOMUSS.
* [Le barème est ici.](https://docs.google.com/spreadsheets/u/0/d/10dxPOl4PPYM4w064hCYTlV5PhX5Sfo58w3TuuYE_VVo/pub?single=true&gid=0&range=A1:E21&output=html)
### Anciens TP
* [Edition multi-résolution d'une animation](doc/M2_TP8_AnimPersonnageUnity-MultiresEditing.pdf)
* [Edition d'animation (C++)](doc/M2_TP9_AnimPersonnageCPP.pdf)
File added
File added
File added
File added
File added
File added
File added
// ==============================================
// ================= IK =========================
// ==============================================
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class IK : MonoBehaviour
{
// Le transform (noeud) racine de l'arbre,
// le constructeur créera une sphère sur ce point pour en garder une copie visuelle.
public GameObject rootNode = null;
// Un transform (noeud) (probablement une feuille) qui devra arriver sur targetNode
public Transform srcNode = null;
// Le transform (noeud) cible pour srcNode
public Transform targetNode = null;
// Si vrai, recréer toutes les chaines dans Update
public bool createChains = true;
// Toutes les chaines cinématiques
public List<IKChain> chains = new List<IKChain>();
// Nombre d'itération de l'algo à chaque appel
public int nb_ite = 10;
void Start()
{
if (createChains)
{
Debug.Log("(Re)Create CHAIN");
createChains = false; // la chaîne est créée une seule fois, au début
// TODO :
// Création des chaînes : une chaîne cinématique est un chemin entre deux nœuds carrefours.
// Dans la 1ere question, une unique chaine sera suffisante entre srcNode et rootNode.
// TODO-2 : Pour parcourir tous les transform d'un arbre d'Unity vous pouvez faire une fonction récursive
// ou utiliser GetComponentInChildren comme ceci :
// foreach (Transform tr in gameObject.GetComponentsInChildren<Transform>())
// TODO-2 : Dans le cas où il y a plusieurs chaines, fusionne les IKJoint entre chaque articulation.
}
}
void Update()
{
if (createChains)
Start();
if (Input.GetKeyDown(KeyCode.I))
{
IKOneStep(true);
}
if (Input.GetKeyDown(KeyCode.C))
{
Debug.Log("Chains count="+chains.Count);
foreach (IKChain ch in chains)
ch.Check();
}
}
void IKOneStep(bool down)
{
int j;
for (j = 0; j < nb_ite; ++j)
{
// TODO : IK Backward (remontée), appeler la fonction Backward de IKChain
// sur toutes les chaines cinématiques.
// TODO : appliquer les positions des IKJoint aux transform en appelant ToTransform de IKChain
// IK Forward (descente), appeler la fonction Forward de IKChain
// sur toutes les chaines cinématiques.
// TODO : appliquer les positions des IKJoint aux transform en appelant ToTransform de IKChain
}
}
}
// ===========================================================================================================================
// =========================================== IKChain =======================================================================
// ===========================================================================================================================
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class IKChain
{
// Quand la chaine comporte une cible pour la racine.
// Ce sera le cas que pour la chaine comportant le root de l'arbre.
private IKJoint rootTarget = null;
// Quand la chaine à une cible à atteindre,
// ce ne sera pas forcément le cas pour toutes les chaines.
private IKJoint endTarget = null;
// Toutes articulations (IKJoint) triées de la racine vers la feuille. N articulations.
private List<IKJoint> joints = new List<IKJoint>();
// Contraintes pour chaque articulation : la longueur (à modifier pour
// ajouter des contraintes sur les angles). N-1 contraintes.
private List<float> constraints = new List<float>();
// Un cylndre entre chaque articulation (Joint). N-1 cylindres.
//private List<GameObject> cylinders = new List<GameObject>();
// Créer la chaine d'IK en partant du noeud endNode et en remontant jusqu'au noeud plus haut, ou jusqu'à la racine
public IKChain(Transform _rootNode, Transform _endNode, Transform _rootTarget, Transform _endTarget)
{
Debug.Log("=== IKChain::createChain: ===");
// TODO : construire la chaine allant de _endNode vers _rootTarget en remontant dans l'arbre (ou l'inverse en descente).
// Chaque Transform dans Unity a accès à son parent 'tr.parent'
}
public void Merge(IKJoint j)
{
// TODO-2 : fusionne les noeuds carrefour quand il y a plusieurs chaines cinématiques
// Dans le cas d'une unique chaine, ne rien faire pour l'instant.
}
public IKJoint First()
{
return joints[0];
}
public IKJoint Last()
{
return joints[ joints.Count-1 ];
}
public void Backward()
{
// TODO : une passe remontée de FABRIK. Placer le noeud N-1 sur la cible,
// puis on remonte du noeud N-2 au noeud 0 de la liste
// en résolvant les contrainte avec la fonction Solve de IKJoint.
}
public void Forward()
{
// TODO : une passe descendante de FABRIK. Placer le noeud 0 sur son origine puis on descend.
// Codez et deboguez déjà Backward avant d'écrire celle-ci.
}
public void ToTransform()
{
// TODO : pour tous les noeuds de la liste appliquer la position au transform : voir ToTransform de IKJoint
}
public void Check()
{
// TODO : des Debug.Log pour afficher le contenu de la chaine (ne sert que pour le debug)
}
}
// ===========================================================================================================================
// ============================= IKJoint =====================================================================================
// ===========================================================================================================================
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Assertions;
public class IKJoint
{
// la position modifiée par l'algo : en fait la somme des positions des sous-branches.
// _weight comptera le nombre de sous-branches ayant touchées cette articulation.
private Vector3 _position;
// un lien vers le Transform de l'arbre d'Unity
private Transform _transform;
// un poids qui indique combien de fois ce point a été bougé par l'algo.
private float _weight = 0.0f;
public string name
{
get
{
return _transform.name;
}
}
public Vector3 position // la position moyenne
{
get
{
if (_weight == 0.0f) return _position;
else return _position / _weight;
}
}
public Vector3 positionTransform
{
get
{
return _transform.position;
}
}
public Transform transform
{
get
{
return _transform;
}
}
public Vector3 positionOrigParent
{
get
{
return _transform.parent.position;
}
}
public IKJoint(Transform t)
{
// TODO : initialise _position, _weight
}
public void SetPosition(Vector3 p)
{
// TODO
}
public void AddPosition(Vector3 p)
{
// TODO : ajoute une position à 'position' et incrémente '_weight'
}
public void ToTransform()
{
// TODO : applique la _position moyenne au transform, et remet le poids à 0
}
public void Solve(IKJoint anchor, float l)
{
// TODO : ajoute une position (avec AddPosition) qui repositionne _position à la distance l
// en restant sur l'axe entre la position et la position de anchor
}
}
File added
File added