Quiero que los objetos se muevan entre dos simulaciones físicas a través de una "ventana" y colisionen con los de ambas simulaciones en caso de que se crucen con el plano de la ventana.
Los sistemas de coordenadas de las simulaciones no tienen el mismo origen y pueden tener una orientación diferente. Ajustar una simulación a sí mismo no es necesario, pero sería una ventaja.
¿Cómo conecto los sistemas de manera eficiente sin clonar los objetos individuales?
Editar:
Los cálculos deben ser lo más precisos posible, para que los objetos no se atasquen si cruzan la ventana al mismo tiempo desde lados opuestos.
physics
collision-detection
Tamschi
fuente
fuente
Respuestas:
Existe un proyecto genial llamado Pseudoform, anteriormente conocido como 'Portalizado', que maneja las simulaciones físicas usando portales de una manera genial:
Seudoformo
¡Echale un vistazo!
Especialmente los videos, es asombrosamente genial.
Es de código abierto, así que puedes ver cómo lo hacen.
Apuesto a que eso es lo que quieres. :)
fuente
Bien, no sé si esto funcionaría.
Basado en la información anterior, pondría disparadores en las 'ventanas' para poder detectar cuándo un objeto está saliendo de un mundo. Tome el vector de velocidad actual en el momento de la colisión. Calcule el intervalo de tiempo restante en función de dónde golpeó el gatillo y dónde terminó este cuadro (fuera del mundo, su mundo necesitaría un borde virtual para permitir esto). En este punto, conoce la velocidad y el intervalo de tiempo que quedan, por lo que puede reposicionarlo en el borde del mundo al que está a punto de ingresar y reproyectar la velocidad. Sin embargo, esto requeriría dos actualizaciones físicas en un marco, y habría un límite de un objeto yendo de a a b mientras que otro va de b a a en la misma posición, no se detectaría ninguna colisión.
Un poco incompleto
fuente
Leí algunas informaciones sobre simulaciones físicas y encontré una posible solución. Funciona dividiendo cada paso de física en tres fases:
1. Pre-Paso:
Cada paso de física, una ventana crea cuatro transformaciones, dos para cada lado de la conexión:
(Las ventanas estáticas solo necesitan hacer esto una vez).
Además, los objetos en cada sistema de coordenadas se dividen en tres grupos:
Física Agrupando http://content.wuala.com/contents/Tamschi/Stack%20Exchange/WindowGrouping.png
Objetos frente a la ventana (verde).
Un objeto también se cuenta hacia este grupo si está intersectando el plano de la ventana o es probable que lo cruce por detrás de la ventana (no se muestra).
Objetos que cruzan la ventana o es probable que se crucen en este paso de física (naranja)
Objetos detrás de la ventana (azul). Si un objeto vuela hacia la parte posterior de la ventana, todavía está marcado como miembro del grupo tres.
La agrupación se puede simplificar si la ventana está en el borde de la simulación.
2. Paso principal:
La física se calcula principalmente como de costumbre, con algunas excepciones:
Los objetos del segundo grupo nunca chocan con los del tercero y viceversa.
La transformación de entrada de la ventana se usa en los objetos del segundo grupo y los resultados se evalúan contra los objetos frontales e intersectantes del sistema de destino. La fuerza resultante se transforma utilizando la transformación de salida y se aplica al objeto original.
(Si se golpea un objeto durante el cálculo, ¡debe reagruparse!)
3. Post-Paso:
Si un objeto del segundo grupo ha cruzado la ventana, se mueve al sistema de destino utilizando la transformación de entrada.
Pensamientos Adicionales:
Si las transformaciones se conservan después de calcular la física, se pueden usar para acelerar el renderizado y facilitar los cálculos de IA. La agrupación podría usarse para eliminar planos de clip del proceso de renderizado.
La desventaja de esta solución es que las ventanas deben agregarse directamente al motor de física.
fuente