Je veux que les objets se déplacent entre deux simulations physiques à travers une "fenêtre" et entrent en collision avec ceux des deux simulations au cas où ils coupent le plan de la fenêtre.
Les systèmes de coordonnées des simulations n'ont pas la même origine et peuvent avoir une orientation différente. Envelopper une simulation en soi n'est pas nécessaire, mais serait un plus.
Comment connecter efficacement les systèmes sans cloner les objets individuels?
Éditer:
Les calculs doivent être aussi précis que possible, afin que les objets ne restent pas coincés s'ils traversent la fenêtre en même temps de côtés opposés.
physics
collision-detection
Tamschi
la source
la source
Réponses:
Il y a ce projet sympa appelé Pseudoform, anciennement connu sous le nom de `` Portalized '', qui gère les simulations physiques en utilisant des portails de manière groovie:
Pseudoforme
Vérifiez-le!
Surtout les vidéos - c'est incroyablement cool.
C'est open source, donc vous pouvez voir comment ils le font.
Je parie que c'est ce que tu veux. :)
la source
D'accord - je ne sais pas si cela fonctionnerait.
Sur la base des informations ci-dessus, je mettrais des déclencheurs sur les «fenêtres» afin de pouvoir détecter quand un objet sort d'un monde. Saisissez le vecteur de vitesse actuel au moment de la collision. Calculez le pas de temps restant en fonction de l'endroit où il a frappé la gâchette et de l'endroit où il a terminé cette image (en dehors du monde, votre monde aurait besoin d'une bordure virtuelle pour permettre cela). À ce stade, vous connaissez la vitesse et le pas de temps restant, vous pouvez donc le repositionner à la frontière du monde dans lequel il est sur le point d'entrer, et reprojeter la vitesse. Cela nécessiterait cependant deux mises à jour physiques dans une trame, et il y aurait la casse d'un objet allant de a à b tandis qu'un autre passe de b à a à la même position - il n'y aurait aucune collision détectée du tout.
Un peu sommaire,
la source
J'ai lu quelques informations sur les simulations physiques et trouvé une solution possible. Il fonctionne en divisant chaque étape physique en trois phases:
1. Pré-étape:
À chaque étape de la physique, une fenêtre crée quatre transformations, deux de chaque côté de la connexion:
(Les fenêtres statiques ne doivent le faire qu'une seule fois.)
De plus, les objets de chaque système de coordonnées sont divisés en trois groupes:
Groupement de physique http://content.wuala.com/contents/Tamschi/Stack%20Exchange/WindowGrouping.png
Objets devant la fenêtre (vert).
Un objet est également compté dans ce groupe s'il coupe le plan de la fenêtre ou est susceptible de le traverser par derrière la fenêtre (non illustré).
Objets coupant la fenêtre ou susceptibles de la croiser dans cette étape physique (orange).
Objets derrière la fenêtre (bleu). Si un objet vole vers l'arrière de la fenêtre, il est toujours marqué comme membre du groupe trois.
Le regroupement peut être simplifié si la fenêtre est au bord de la simulation.
2. Étape principale:
La physique est calculée principalement comme d'habitude, à quelques exceptions près:
Les objets du deuxième groupe n'entrent jamais en collision avec ceux du troisième et vice-versa.
La transformation d'entrée de la fenêtre est utilisée sur les objets du deuxième groupe et les résultats sont évalués par rapport aux objets avant et entrecroisés du système de destination. La force résultante est transformée à l'aide de la transformation de sortie et appliquée à l'objet d'origine.
(Si un objet est touché pendant le calcul, il doit être regroupé!)
3. Après l'étape:
Si un objet du deuxième groupe a traversé la fenêtre, il est déplacé dans le système de destination à l'aide de la transformation d'entrée.
Réflexions supplémentaires:
Si les transformations sont conservées après le calcul de la physique, elles peuvent être utilisées pour accélérer le rendu et pour des calculs d'IA plus faciles. Le regroupement pourrait être utilisé pour supprimer les plans de clips du processus de rendu.
L'inconvénient de cette solution est que les fenêtres doivent être ajoutées directement dans le moteur physique.
la source