O que são "campos de distância" e como eles são aplicáveis ​​à detecção de colisão?

12

Eu estava olhando para alguns métodos eficientes de detecção de colisão em uma cena com objetos estáticos e dinâmicos quando me deparei com "campos de distância".

Tentei pesquisar e entender esse conceito, mas só consegui encontrar trabalhos escritos em linguagem muito complexa. Alguém pode explicar em palavras fáceis o que são campos de distância e como podem ser usados ​​para a detecção de colisões?

Muhammad Omer
fonte
você quis dizer mapas de distância?
LearnCocos2D

Respostas:

13

Um campo de distância ( ou transformação de distância ou mapa de distância ) é uma estrutura em grade onde cada célula na grade representa a menor distância dessa célula para uma célula com alguma outra propriedade. Na maioria das vezes, essa "outra propriedade" é um tipo de célula de limite, como uma parede pela qual um jogador não pode passar ou a superfície de uma malha.

Os campos de distância têm muita aplicabilidade. Você pode imaginar, por exemplo, como eles podem ser usados ​​para implementar a orientação de movimento (criando mapas de distância para objetos perigosos ou desejáveis ​​e ponderando as decisões de movimento por eles).

No entanto, você perguntou especificamente sobre colisão. O uso de campos de distância para realizar a detecção de colisão entre dois objetos em movimento pode se tornar rapidamente ineficiente, pois a reconstrução de campos de distância pode se tornar muito lenta à medida que o escopo do campo aumenta (especialmente em 3D, embora os métodos para melhorar o tempo de geração sejam uma área de pesquisa ).

A colisão no campo de distância é, portanto, usada principalmente para detectar colisão de um objeto dinâmico com um estático. Freqüentemente, eu já vi isso feito para detectar colisão de objetos de pano (ou outros deformáveis) com outros objetos fixos na cena .

De maneira grosseira, isso é feito usando um campo de distância assinado para o objeto estático, em que um sinal (geralmente negativo) representa uma célula dentro da malha e o outro (obviamente positivo) representa uma célula fora da malha. As partículas da malha de tecido podem ser transformadas no espaço local da malha estática, e as posições "antes" e "depois" de uma partícula durante uma determinada etapa de simulação de tecido podem ser verificadas no campo de distância para determinar se o sinal foi alterado (e assim ocorreu uma colisão). Este é o método discutido neste artigo de 2003 sobre simulação de tecidos , por exemplo.

Observe que eu não sugeriria o uso de campos de distância como seu único método de detecção de colisões. Eles podem ser bastante eficientes para o que são bons, mas não são bons em tudo. A melhor maneira de obter uma detecção de colisão eficiente é freqüentemente usar vários métodos, hierarquicamente, com maior precisão à medida que você percorre a hierarquia.


fonte
5

O que são campos de distância?

Em geometria e computação gráfica e também usado no processamento de imagens, um campo de distância (em palavras simples) é um rótulo em cada célula (pixel no processamento de imagens) com a distância do objeto poligonal mais próximo ou um pixel com propriedades especiais no processamento de imagens .

Em outras palavras, é um rótulo para cada célula que possui o valor de um objeto mais próximo com propriedade especial definida pelo mapa. O objeto varia dependendo do aplicativo.

insira a descrição da imagem aqui

A imagem acima contém um mapa de distância para pixels de limite. Observe como cada pixel contém a distância do pixel limite mais próximo. A distância é calculada usando a distância de Manhattan.

Existem diferentes maneiras de calcular a distância, abordagens típicas incluem:

Como é aplicável na detecção de colisões?

Mantendo um mapa de distância para objetos na cena, é possível verificar se dois objetos estão colidindo com base na distância. Infelizmente, manter esse mapa é caro. E isso geralmente é usado em objetos com auto-interseção, como simulações de tecidos, onde os mapas de distância podem ser mantidos e atualizados com mais eficiência devido à natureza do objeto.

concept3d
fonte
Por que isso pode ser feito "de forma mais eficiente" em objetos com interseção automática?
Lucidbrot