Le moteur physique dont nous allons voir les différents traits aura les caractéristiques suivantes :
-> Moteur physique 3D, orienté vers DirectX car le moteur sera voué à travailler avec un moteur 3D basé sur Direct3D.
-> Codage en C++
-> Utilisation des types de base de DirectX (D3DXVECTOR4, D3DXMATRIX)
-> Moteur de particules
-> Gestion de rayons
-> Gestion de rigid-body
Caractéristiques du moteur de particules :
-> Variation du nombre maximum de particule en runtime
-> Optimisation de la gestion de nombreuses particules en les regroupant en emetteur
-> Gestion des collisions avec tous les rigid-body du moteur
Quelques remarques :
-> La dépendance de DirectX est très faible, il est possible de s'en défaire sans trop de soucis, pour cela j'utiliserai les types Vector, et Matrix pour ceux qui souhaiteraient du code plutôt indépendant de DirectX.
-> Les explications tentent le plus possible d'être structurées pour réaliser une certaine progression. Il est possible pour certains de penser que je m'attarde sur des détails, ils auront de l'importance plus tard...
Les choix décisifs :
-> Le moteur sera en Left-handed, car DirectX est en left-handed, les changements de repères seraient un facteur limitant les performances.
-> L'ordre des transformations dans les changements de repères sont Y, X, Z. Car DirectX possède cet ordre. Le but final du moteur est de retourner la matrice de transformation du mesh qui modélise de Rigid-body, il faut absolument que l'ordre des transformations du moteur soit le même que celui de l'affichage... Donc celui de DirectX... Comme il est hors de question de gérer les rigid-body avec cet ordre et le reste du moteur avec un ordre différent, le moteur entier tournera en YXZ.
La première chose quand on code un moteur physique c'est les bases. Les
objets qui vont servir très souvent : les torseurs, les vecteurs, les matrices, les repères, les SmartVector. Ensuite on peut commencer à coder un moteur et les corps qu'il sera suceptible de gérer.
Les vecteurs
Les vecteurs sont de loin les objets les plus manipulés dans un moteur physique. Il permettent dans les torseurs de contenir des informations, dans les SmartVector de participer aux calculs.
Il est possible d'utiliser une class faite maison, mais c'est assez lourd à coder, il y a des opérateurs partout, il faut optimiser pas mal de choses.
Mon conseil est d'utiliser des class déjà faite (Les types de DirectX sont parfait, ils sont éprouvé, utilisations dans pas mal d'applications, s'il y avait des erreurs de codage, ça se saurai... )
Les matrices
Les matrices sont des éléments de calculs très important car elles modélisent aussi bien des transformations 3D que des opérations sur les vecteurs. Comme pour les vecteurs je préconise d'utiliser es types déjà codés.... Il y aura assez de boulot avec le moteur.
Les torseurs
Les torseurs sont les outils indispensables des calculs de la physique du solide.
Voir la class de base des torseurs
Les repères
Les repères sont des outils de base avancés, car ils utilisent les vecteurs, les matrices. Ils permettent de rendre au codeurs du moteur une transparance dans l'utilisation des vecteurs et surtout de la gestions des corps non ponctuels.
Voir la class de base des repères
Les SmartVector
Les SmartVector permettent de faire évoluer la class de base des vecteurs, et d'apporter des possibilités enormes de calculs et de transparence dans le codage du moteur, mais également pour l'utilisateur.
Voir la class de base des SmartVector
Partager