Birçok küçük üçgenden yapılmış nesneler üzerinde çarpışma algılaması nasıl yapılır?


13

Herhangi bir şeklin daha küçük üçgenler tarafından oluşturulabileceğini (veya yaklaşıklaştırılabileceğini) anlıyorum. Herhangi bir dikdörtgen 2 küçük üçgenle oluşturulabilir. Herhangi bir daire birçok ince "pizza dilimi" üçgen tarafından oluşturulabilir. Bu çarpışma tespitine nasıl dönüşür?

Köşeleri kullanarak dikdörtgen çakışmasını nasıl hesaplayacağımı anlıyorum. Merkez, yarıçap ve mesafeyi kullanarak daire çakışmasını nasıl hesaplayacağımı anlıyorum.

Ancak, küçük üçgenlerden yapılmış şekiller üzerinde çarpışma tespiti nasıl yapılır? Özellikler değil, sadece genel konsept ....

Yanıtlar:


26

Ancak, küçük üçgenlerden yapılmış şekiller üzerinde çarpışma tespiti nasıl yapılır?

Bunu yapmadan.

Rastgele bir üçgen koleksiyonuna (ya da iki rastgele üçgen koleksiyonu arasında daha kötüsü) çarpışma tespiti oldukça pahalıdır.

Bunun yerine, toplama algılamasını genellikle hiyerarşik bir tarzda yaparız, ilk önce temel nesneye yaklaşık (zayıf) yaklaşan son derece kaba, basit şekillerle (kutular veya küreler gibi) başlarız.

Bu, potansiyel çarpışmaların çoğunu "olmuyor" olarak hızlı bir şekilde reddetmemize izin verir, ki bu normal durumdur. Böyle bir kaba kontrolün geçmesi durumunda, bu potansiyel bir çarpışmayı gösterir ve kontrolü altta yatan şeklin daha ayrıntılı bir yaklaşımına (örneğin, sıkıca takılmış çok sayıda kapsül şeklinden biri veya hizalı sınırlama kutuları).

Esasen, çarpışma tespiti ham testlerle başlar ve bu testler geçtikçe daha ayrıntılı temsile devam eder. Shiro tarafından Alexandre'ın cevabına yaptığı bir yorumda sunulan bu görüntü, karmaşık bir modelin (bir insan) bir dizi daha basit şekil ile nasıl temsil edilebileceğini göstermektedir:

hitboxes

Nadiren tek tek üçgen seviyesinde çarpışma yapmamız gerekiyor ve bunu yaparken genellikle test etmek için çok küçük bir potansiyel üçgen setine inmek için cruder yöntemlerini kullandık. Bu noktada, tıpkı iki dikdörtgenin çakışıp çakışmadığını test ettiğiniz gibi, testleri gerçekleştirmek için belirli algoritmalar kullanılır. Örneğin, bir ışının bir üçgene çarpıp çarpmadığını ve nerede olduğunu belirleyebilirsiniz .


Teşekkürler. Evet, eğer gerçekten bir oyun yapsaydım, sadece mevcut bir motoru kullanırdım. Ancak, önceden yapılmış bir çarpışma tespit motorunda uygulanan temel fikirleri anlamak istiyorum. Yukarıdaki şemanızda, adamı oluşturan düzinelerce dikdörtgenden HERHANGİ BİRİNE dokunup dokunmadığını görmek için dikdörtgen matematik kullanıyor olacaksınız. Temel fikir bu mu?
JackOfTüm

Bu dikdörtgenler değil, yönlendirilmiş sınırlama kutuları (3D). Ama evet. Eğer bir ışının (mermiyi temsil eden) bir oyuncu ile çarpışıp çarpışmadığını test edecek olsaydım, ışını bu kutulara karşı test ederdim - muhtemelen ilk olarak tüm karakteri temsil eden dev bir kutuya karşı test ettikten sonra - her birine karşı değil üçgen örgü).

Fikir, yukarıdaki resimde gösterilen yönlendirilmiş sınırlayıcı kutular gibi karakterin kaba bir yaklaşımını kullanabileceğiniz ve önce daha ucuz bir isabet testi yapmak için test edebileceğiniz ve çarpışma varsa daha düşük bir seviyeye inebileceğinizdir. Gerekirse, sınırlayıcı kutuda bulunan üçgenleri tek tek test edin. Tipik olarak, hiyerarşik olarak kullanılan birkaç dış BV olabilir, dış olan daha az doğrudur, ancak en hızlı test edilir (küre, sınırlayıcı kutu) ve daha spesifik bir şeye (k-DOP) sondaj yapar ve potansiyel olarak daha da fazla (üçgenler) )
Kik

4

Çarpışma tespiti geometriye dayanır (çizgi, düzlemler, küreler, kutular, kapsüller, silindirler gibi ilkeller).

Örneğin, düz olmayan bir arazi gibi üçgenden yapılmış şekiller üzerinde çarpışma algılaması yapmanız gerekiyorsa, ağı oluşturan tüm üçgenlere karşı test etmeniz gerekir.

Bu noktaya gelirseniz, bu tür şeyler oldukça karmaşık, oldukça hızlı hale geldiğinden, önceden yapılmış bir çarpışma algılama motoru kullanmanızı şiddetle tavsiye ederim.


Üçgenlerden oluşan şekiller üzerinde çarpışma tespiti nasıl yapılır?
JackOfTüm

Tüm cevaplarında daha önce bahsettiğinden, genellikle geometri şekilleri kullanarak olduğunu söyledi i.stack.imgur.com/CAhxn.jpg
dimitris93

@JackOfTüm cevabımı düzenledim; ve Shiro'nun dediği gibi, çevrenizde (bedenler, sandalyeler, arabalar, vb.) daha karmaşık "öğeler" varsa, oyun geliştirmede genellikle birbirine bağlanan daha basit ilkellerden yapılırlar. Çarpışmaların tespiti ilkel şekiller üzerinde yapılır, ancak daha sonra tüm beden üzerinde fizik simülasyonu yapılır.
Vaillancourt

4
Kelimenin tam anlamıyla bir oyun yapmaya çalışmıyorum, sadece önceden yapılmış bir çarpışma algılama motorunda uygulanan temel fikirleri anlamak istiyorum. Aslında bir oyun oynasaydım, açıkça tekerleği yeniden keşfetmezdim, kabul etti.
JackOfTüm
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.