Döşeme ızgarası için bir gezinme ağını nasıl oluşturabilirim?


18

Aslında bunun için programlamaya henüz başlamamıştım, ama yine de bunu nasıl yapacağımı görmek istedim.

Diyelim ki hepsi aynı boyutta, bazıları sürülebilir ve bazıları olmayan bir karo ızgaram var. Bu ızgaradan çokgenler için bir gezinme ağı oluşturmaya nasıl devam edebilirim?

Benim fikrim, geçilemeyen karoları çıkarmak ve çokgenler yapmak için kenarlardan çizgiler uzatmaktı ... şimdiye kadar sahip olduğum tek şey bu. Herhangi bir tavsiye?


2
Teknik olarak, ızgara hemen hemen bir navigasyon ağına eşdeğerdir. Aslında ızgarayı optimize etmek ve bitişik kareleri birleştirmek için bir yol istediğinizden şüpheleniyorum.
Kylotan

@Kylotan Evet demek istediğim, bitişik çokgenleri birleştirmenin bir yolu.
Ross Hays

Yanıtlar:


28

İşte bir RTS oyunu için navmesh yaparken karşılaştığım yöntemlerden biri. Homebrew olduğunu, hiçbir üçüncü taraf araç kullanılmadığını, uygulanması ve hata düzeltmesinin yaklaşık 3 hafta sürdüğünü unutmayın:

  1. Yürüyen Kareleri KullanEngel döşemelerini ana hatlara dönüştürmek için algoritmasını . Harita kenarlarının da anahat olduğunu ve dahil edilmesi gerektiğini unutmayın.
  2. Douglas-Peucker algoritmasını kullanarak anahatlardaki nokta sayısını azaltın (alttaki resimde mor çizgiler)
  3. Tüm noktaları Delaunay nirengi haline getir (en düzgün üçgenleri elde etmek için)
  4. Boş alanlara ve harita kenarları boyunca ek noktalar ekleyin (daha eşit navmesh elde etmek için)
  5. Delaunay tarafından ana hatları eşleştirmek için üretilen engel anahatlarını ve flip çokgenleri kontrol edin.- Genellikle Delaunay anahatlarınızı (kırmızı) uyuşmayan üçgenler (gri) yerleştirebilir, o zaman onları tespit etmeniz ve çevirmeniz gerekir. Onları bir çokgene geri getirin, anahat (lar) boyunca bölün ve elle üçgenleyin resim açıklamasını buraya girin
  6. Klip engelleri innards - engeller içindeki çokgenleri kaldırın (yukarıdaki resimde pembe)
  7. Gereksinim duyduğunuzda kalan üçgenler ve köşeler arasında bağlantı verilerini doldurun - işte bu sizin navmeshinizdir.

Sonuç:

tilemap navmesh


1

Kafesler genellikle grafik olarak uygulanır. Bir bulguyu ızgaraya dayalı bir haritada uygulamak istiyorsanız aşağıdakileri yapın:

Her çaprazlanabilir karenin bir tepe noktası olarak gösterildiği bir grafik oluşturun. Köşeler olarak temsil edilen her bir bitişik çapraz kareler çifti, aralarında bir kenara sahip olacaktır. Ve işiniz bitti.


1
Navmeshes bu şekilde uygulanmaz. Bir navmesh'in amacı (ve hayal ediyorum ki, askerin burada bile soru sormalarının nedeni), grafiği, hem iyi bir yol bulmak için gerekli adımlar ve mesh tanımlamak için gerekli bellek ayak izi. Ham bir uygulama hem bir ton daha fazla bellek tüketir hem de değerli AI işleme süresini harcar.
Gurgadurgen

Haklısın. Elbette decimation (çokgen indirgeme) makul ve istenen bir optimizasyondur. Sadece op'un sorusunu okuduğunuzda , sadece bir ızgarayı grafiğe dönüştürmek istediğini anlıyorsunuz.
wolfdawn
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.