Eu quero que os objetos se movam entre duas simulações de física através de uma "janela" e colidam com os de ambas as simulações, caso cruzem o plano da janela.
Os sistemas de coordenadas das simulações não têm a mesma origem e podem ter uma orientação diferente. Não é necessário agrupar uma simulação em si, mas seria uma vantagem.
Como faço para conectar os sistemas com eficiência sem clonar os objetos individuais?
Editar:
Os cálculos devem ser o mais precisos possível, para que os objetos não fiquem presos se atravessarem a janela ao mesmo tempo de lados opostos.
physics
collision-detection
Tamschi
fonte
fonte
Respostas:
Existe um projeto interessante chamado Pseudoform, anteriormente conhecido como 'Portalized', que lida com simulações de física usando portais de maneira groovie:
Pseudofórmio
Confira!
Especialmente os vídeos - é incrivelmente legal.
É open source, então você pode ver como eles fazem isso.
Aposto que é isso que você quer. :)
fonte
Ok - não sei se isso funcionaria.
Com base nas informações acima, eu colocaria gatilhos nas 'janelas' para detectar quando um objeto está saindo do mundo. Pegue o vetor de velocidade atual no momento da colisão. Calcule o timestep deixado com base em onde ele atingiu o gatilho e onde terminou esse quadro (fora do mundo, seu mundo precisaria de uma borda virtual para permitir isso). Nesse ponto, você sabe a velocidade e o timestep restantes, para poder reposicioná-lo na fronteira do mundo em que está prestes a entrar e reprojetar a velocidade. No entanto, isso exigiria duas atualizações físicas em um quadro, e haveria a borda de um objeto indo de a para b enquanto outro vai de b para a na mesma posição - não haveria nenhuma colisão detectada.
Meio esboçado,
fonte
Li algumas informações sobre simulações de física e encontrei uma solução possível. Ele funciona dividindo cada etapa da física em três fases:
1. Pré-etapa:
Cada etapa da física, uma janela cria quatro transformações, duas para cada lado da conexão:
(As janelas estáticas precisam fazer isso apenas uma vez.)
Além disso, os objetos em cada sistema de coordenadas são divididos em três grupos:
Agrupamento de física http://content.wuala.com/contents/Tamschi/Stack%20Exchange/WindowGrouping.png
Objetos em frente à janela (verde).
Um objeto também é contado para esse grupo se ele estiver cruzando o plano da janela ou provavelmente atravessá-lo por trás da janela (não mostrado).
Objetos que cruzam a janela ou provavelmente interceptam-na nesta etapa da física (laranja).
Objetos atrás da janela (azul). Se um objeto voa em direção à parte traseira da janela, ele ainda é marcado como membro do grupo três.
O agrupamento pode ser simplificado se a janela estiver na borda da simulação.
2. Etapa principal:
A física é calculada principalmente como de costume, com algumas exceções:
Os objetos do segundo grupo nunca colidem com os do terceiro e vice-versa.
A transformação de entrada da janela é usada nos objetos do segundo grupo e os resultados são avaliados em relação aos objetos da frente e da interseção do sistema de destino. A força resultante é transformada usando a transformação de saída e aplicada ao objeto original.
(Se um objeto for atingido durante o cálculo, ele deverá ser reagrupado!)
3. Pós-etapa:
Se um objeto do segundo grupo atravessou a janela, ele é movido para o sistema de destino usando a transformação de entrada.
Pensamentos adicionais:
Se as transformações forem preservadas após o cálculo da física, elas poderão ser usadas para acelerar a renderização e facilitar os cálculos de IA. O agrupamento pode ser usado para remover os planos de clipes do processo de renderização.
A desvantagem desta solução é que as janelas precisam ser adicionadas diretamente ao mecanismo de física.
fonte