après de nombreuses tentatives, je suis allé avec box2d.
il y a généralement deux approches pour cette simulation ou du moins j'en ai trouvé 2:
- la première consiste à utiliser des formes de cercle et à les connecter à l'aide d'articulations distantes.
- et l'autre consiste à créer des rectangles pour la chaîne elle-même, puis à les attacher à l'aide de joints tournants
dans chaque senario, vous devez avoir un ancre (qui dans mon cas était une boîte statique). il vaut mieux que vous diminuiez le poids des pièces de corde (que vous utilisiez des formes de cercle ou des formes de rectangle), par exemple pour avoir une physique plus réaliste, je règle leur densité à 0,1 et pour la boîte connectée à l'extrémité de la corde, j'utilise la densité 10.
une autre chose que vous devez vous soucier de la façon dont votre segment de corde réagit les uns aux autres. Je voulais juste que ma corde bouge librement dans la scène, j'ai donc marqué tous les appareils de corde comme capteurs. vous pourriez avoir besoin d'une approche différente.
la prochaine chose dont vous devez vous soucier est le nombre d'itérations que vous passez à la mise à jour mondiale: pour un segment de corde bas (peut-être 8 au plus), il n'est pas nécessaire d'utiliser une valeur d'itération élevée, peut-être 10/10, ce que box2d lui-même a suggéré est suffisant, mais si vous augmentez le nombre de segments, par exemple, j'ai essayé 30 segments, avec un faible nombre d'itérations, votre corde semble augmenter sa longueur plus qu'elle ne devrait, donc vous avez peut-être besoin de 40 à 40 itérations pour résoudre ces situations.
après quelques tests, il semble que la boîte 2d est conçue pour les scènes avec des tailles d'objet de 0,1 m à 10 m et la taille maximale suggérée pour les grandes scènes est d'environ 50 mx 50 m. Donc, fondamentalement, vous devez réduire votre objet pour correspondre à ces paramètres. dans mon cas, j'ai d'abord essayé de passer les positions des pixels directement à box2d mais il semblait qu'il y avait des limites de vitesse empêchant le monde de bouger aussi vite qu'il le devrait, j'ai donc dû redimensionner ma scène environ 64 fois pour obtenir les meilleurs résultats. bien que je ne me sois pas testé, il y a des limites dans box2d qui vous empêchent d'utiliser des scènes plus grandes. par exemple, il existe une valeur définie dans le b2Setting.h
fichier, #define b2_maxTranslation 2.0f
vous pouvez modifier les paramètres de box2d mais cela ne semble pas recommandé.