non je connais pas bullet, il a l'air pas mal, mais je reste sur NGD
Le problème en .net c'est qu'il faut ce faire un wrapper, et c'est très très long.
Quand à l'utilisation de newton, c'est assez simple:
On créé une géométrie de base exemple:
Geo_id = nt.Create_Box(size.X, size.Y, size.Z)
puis on créé les objets interne avec cette géométrie:
Obj_Id = nt.Create_Body(Geo_id)
et on envoi la matrice world de notre Mesh
nt.Set_Body_Matrix(Obj_Id, Floor.Matrix_World)
Voila pour un sol de base.
Enssuite pour ajouter quelque centaine de cube c'est le même principe avec leur masse en plus:
nt.Set_Body_Mass(Cube_id, 1, 1, 1, 1)
et pour ne pas s'enmerder à interroger newton pour récupérer la matrice obtenu de nos 100ènes de cubes on attache 2 fonctions callback qui vont être appelé par newton lorsque qu'un cube a ça matrice qui change:
1 2
| nt.Set_Body_TransformCallback(Cube_id, Tf) 'update de la matrice
nt.Set_Body_ForceAndTorqueCallback(Cube_id, fat) 'application des forces |
Et pour que cela marche correctement on attache aussi votre class mesh:
nt.Set_Body_UserData(Cube_id, CubeMesh(0))
Enssuite dans la boucle de rendu on a juste à appeler la fonction update
et en interne vos fonctions de transformation et d'application des forces vont être appelé (callback)
ce qui nous donne par exemple notre fonction qui renvoi la matrice world obtenu a votre mesh:
1 2 3 4
| Public Sub PhysicsSetTransform(ByVal body As IntPtr, ByRef matrix As T3DMath.Matrix)
matrix = nt.Get_Body_Matrix(CInt(body))
CType(nt.Get_Body_UserData(CInt(body)), T3DMesh).Matrix_World = matrix
End Sub |
Et même style pour l'application des forces
Enfin Bref en gros c'est à peu près ça avec des noms de fonction un peu different des miens
Partager