Komşu karoların farklı yüksekliklerinde karo haritası / arazi uygulaması


10

Ahoy!

Döşeme haritaları hakkında bazı bilgiler arıyorum, ya da daha doğrusu, belirli bir tür kiremit haritası denir.

Rollercoaster tycoon'da kullanılan uygulama türüyle veya nakliye kralı oyun serisiyle ilgileniyorum ve vektör alan arazisine ve yükseklik haritası arazisine bakıyorum ama aradığım şey için uygun olduklarından emin değilim geliştirmek.

Çoğu insanın izometrik bir karo haritası olarak adlandırdığı gibi iyi bir bilgi bulmak için bir mücadele oldu, ancak 3D olarak sabit bir ortografik bakış açısıyla bir şeyler yaratmak istiyorum. Kiremit haritasının altında yatan depolamanın nasıl oluşturulduğuyla ilgisi olmadığını anlıyorum, ancak eski okul pokemon / zelda oyunları gibi bir 2D kiremit haritası oluşturmak istemiyorum. kayalıklar ve eğimli arazi sarkan.

Ben hangi yolu devam etmek karar vermeme yardımcı olmak için kaynak için google ve stackoverflow aramak için doğru terimleri bulmaya çalışıyorum.

Şimdiye kadar bir VBO'da saklanan ve tel kafes olarak oluşturulan height / y bileşenini kullanmadan temel bir karo haritasını çıkarmayı başardım. Bu şimdiye kadar iyi görünüyor ama komşu bir kiremit etkilemeden uçurumlar ve eğimler oluşturmak için tek bir tepe noktasını manipüle etmeye çalışırken problemlerle karşılaşacağımı düşünüyorum.

Araştırmam gereken belirli bir uygulama türü var mı? Ben vektör alanı arazi hakkında bilgi eğer adil bir miktar bulduğunda ben kırık düşündüm ama bu da doğru sonuçlar verecek emin değilim.

Herkes bana bu konuda biraz ışık tutabilir, yardım büyük mutluluk duyacağız :)

Güncelleme

Neyi başarmak istediğime dair daha fazla açıklama için bir resim ekledim:

2.5D kiremit haritası

Görüntü ödünç eğik oluşturun Nasıl (yükseklik) izometrik fayans

Bu görüntü, oluşturmak istediğim arazi türünü gösterir ancak modelleme ile ilgilendiğim "uçurumları" veya taşan arazi türlerini içermez. Bununla birlikte, dikkate almadığım diğer birkaç soruyu gündeme getiriyor;

  • Su (görüntünün sol üst kısmı) gibi 'katmanlar' suyun altında görünen zemini içerecek şekilde nasıl ele alınır?
  • Toprak / çamurun dünyayı düz olmayan bir varlık olarak tasvir etmesi için haritanın "kenarları" nasıl karşılanabilir?
  • Bu tür araziler için temel depolama, bir tepeden aşağı yuvarlanan bir top veya bir eğimden geçen bir oyuncunun hareket hızları gibi fiziği modellemek için kullanılabilir mi?

Arazinin her bir döşemesinin, 4 ana köşenin gerçek döşemenin kendisini kapsadığı ve kalan 4 köşenin her bir döşemenin kenarlarını / duvarlarını modellemek için kullanıldığı 8 köşe ile modellenebileceği konusunda bir fikrim vardı. Bu uygulama ile gördüğüm iki sorun, a) dünya haritasının boyutunun iki katına çıkması ve b) tüm karoların "duvar" içermeyeceği göz önüne alındığında, bazı karoların kullanılmayan yedek köşelerle sonuçlanacağıdır.

Her oyunun deforme olmasına izin veren ve aynı zamanda oyun sırasında araziyi değiştirme yeteneğini de içeren bir arazi editörü oluşturmak istiyorum. Bu kendi içinde; VBO, anında modifiye edilirken araziyi depolamak ve oluşturmak için kullanılabilir ve ayrıca komşu karoları etkilemeden köşeleri değiştirmek mümkün müdür?

İstediğimi nasıl elde edeceğime dair net bir fikre sahip olmadan sorunu çözmek için herhangi bir kod yazmayı ihmal ettiğim için ya aşırı karmaşık ya da analiz felci içine girdiğim izlenimi altındayım.

Yine, ben sadece bununla doğru yönde bir kıpırdamak arıyorum. 3D haritanın hem harita düzenleyicisi hem de oyun sırasında deforme olmasını sağlayacak belirli bir tür harita / arazi uygulaması var mı yoksa tabiri caizse kendiminkini yuvarlamak zorunda mıyım? Burada tekerleği yeniden icat etmeye çalışmıyorum ama ne arayacağımdan emin olmadığım için herhangi bir kaynak bulmakta zorlanıyorum.

Herkes herhangi bir bilgi, kaynak veya kod parçacıkları sağlayabilir, bu ellerimi kirletmek ve şu anda sahip olduğum düz tel kafes dışında bir şey üretmeye başlamak için istekli olduğum için çok takdir edilecektir.

Okuduğunuz için teşekkürler!

Yanıtlar:


2

Ben olsaydım, voksellere, daha özel olarak Minecraft tipi küp oluşturmaya bakardım. Yükseklik haritalarının aksine, çıkıntıları, mağaraları, çok katlı binaları vb.

Arazinizi, sayıların belirli bir arazi türüyle eşleştirildiği bir 3D tamsayı dizisinde depolarsınız: 0 = hava, 1 = kir, 2 = su, vb. Sonra, oluşturulacak kafes oluşturmak için, boş olmayan her voksel için bir küpün yüzlerini oluşturun.

Bu öğretici , Ogre3D kullanarak C ++ ile nasıl yapılacağına dair harika bir açıklamadır. OpenGL'de biraz daha düşük seviyeye gitmeniz gerektiğini düşünüyorum.

Küpleri oluşturduktan sonra, görüntünüzde gösterilen türde bir sıvı alanı oluşturmak için kenarları yumuşatmak istersiniz. PolyVox (ayrıca C ++) bunu yapar inanıyorum ; kodlarına bir göz atabilirsiniz. Sanırım temelde görüntünün 2D'de gösterdiği şeyleri 3D olarak yapıyorsunuz: her bir tepe noktasını nereye yerleştireceğinizi bilmek için çevresindeki küp konumlarını ortalayın.

DÜZENLE:

  • Su karosu boşmuş gibi suya bitişik küplerin yüzlerini oluşturun ve su yüzlerini şeffaf bir şekilde oluşturun.
  • Eğer dünya dışındaki voksellerin boş olduğunu düşünüyorsanız, "kenar" daki yüzler normal yüzler gibi oluşturulabilir.
  • Fizik: Oluşturulan ağı muhtemelen fizik motorunuza statik bir nesne olarak besleyebilirsiniz.
  • Harita düzenleyici: Ağın kendisini değil, temel voksel verilerini düzenlemek istersiniz! (Kafes verileri yansıtmalıdır, bu nedenle vokselleri düzenlemek ağınızda değişiklikler üretmelidir.) Bilmiyorsanız Model, Görünüm, Denetleyici (MVC) konusuna bakmak isteyebilirsiniz.

Başka sorularınız varsa yorum bırakmaktan çekinmeyin. Gamedev.SE'ye hoş geldiniz!


Bu, nispeten basit bir sorun için çok karmaşık bir çözümdür. Birçok oyun, voksellerin karmaşıklığı olmadan OP'nin sorduğu şeyi yaptı.
Sean Middleditch

Voksellerin karmaşık olabileceğine katılıyorum. Lütfen bu oyunlara link verir misiniz? Nasıl yaptıklarını duymakla ilgileniyorum.
Wackidev

Voksel kullanma fikri ile oynuyordum. Bu uygulama tüm küplerin birim boyutlarda olduğunu ima eder mi, yoksa tek bir küp ekstrüde edilebilir mi? Sanırım y ve düzlem boyunca "üst üste gelebilir" su ve diğer fayans izin için katmanlar halinde depolanması gerekir tahmin ediyorum.
CaptainRedmuff

Evet, tipik olarak vokseller birim boyutundadır. Sanırım biri onları alaşağı edebilirdi, ama bence bu daha karmaşık olacak. Katmanlar hakkında ne demek istediğinizi anladığımdan emin değilim. Değişken yükseklikte su karolarından mı bahsediyorsunuz?
Wackidev

Bu çizgiler boyunca bir şey. Daha sonra, sadece ikisinin kesiştiği düzlemle tanımlanan üstünde bir su küpü olan ekstrüde bir küp olabilecek bir "zemin" tanımlamayı düşünüyordum. Belki bir şeyleri tekrar karmaşıklaştırıyorum. Vokselleri biraz daha okuyacağım ve bunun beni nereye götürdüğünü göreceğim.
CaptainRedmuff

6

Bu: http://30.media.tumblr.com/tumblr_m06qv6OREt1r2qjpao1_500.png Bir süre önce yaptığım haritaya bir örnek.

Haritayı ve farklı çinileri temsil eden bir XML vardı. Her türün birkaç özelliği vardır:

  • Yükseklik
  • Durum
  • Birleştirme Türü: Bu döşemenin ne tür bir birleştirmesini yapar ALL(çevresindeki herhangi bir döşemeyle birleşmesi gerekiyorsa), EQUAL(yalnızca aynı türdeki döşemelerle birleştirilir), NONE(asla birleştirilmez).
  • Birleştirme Yüksekliği: Eğimler için maksimum yükseklik (çıkıntılar için iyi), bir döşemenin yalnızca aynı yükseklikte veya 1 farkındaki döşemelerle birleştirilmesini istediğinizi varsayalım, değer bir olacaktır.

Sonra tüm karoları okur ve sahnede yaratırdım. İlk olarak sadece pozisyonu dikkate alarak. Her karo komşu olduğunu bilmek zorundaydı, bu yüzden haritadan iki kez, her şeyi oluşturmak için bir kez ve her köşeyi doğru konuma taşımak için bir kez daha gitmek zorunda kaldım.

Modellerim altıgen olmasına rağmen, konsept aynı, döşemenizi temsil etmek için bir küpe ihtiyacınız olacak, daha sonra taban köşelerini en düşük seviyeye taşıyacak ve küpün üstünü küpler ile 'düzleştireceksiniz'. Ayrıca, küplerin iki tarafının birleştirilip birleştirilmediğini de kontrol edersiniz, böylece o tarafı küpten çıkarabilirsiniz (birleştirilmediyse muhtemelen bir uçurum veya bir şeydir).

Fizik hakkında, hedefinize bağlıdır. Eğer rollercoaster kralı gibi bir şey yapıyorsanız, onlara gerçekten ihtiyacınız yoktur. Her bir karo arasındaki oyuncu yüksekliğini kontrol edebilir ve yürüme hızına karar verebilirsiniz. Kendi başına hareket eden bir nesne için de (top gibi) aynı şeyi yapabilir, fayansları (veya mevcut karo açısını) kontrol edebilir ve bir yön / hız belirleyebilirsiniz. Gerçekçi fiziğe (yerçekimi, sürtünme vb.) İhtiyacınız varsa, bir fizik motoru kullanmanız gerekir ve motordaki küp 3D gösterimini kullanabilirsiniz.

Katmanlar da mümkündür, ancak minecraft gibi bir şeye ihtiyacınız olacaktır (en yüksek katmandaki küpleri yumuşatmakla). Sadece su için katmanlara ihtiyacınız varsa, bir kiremit üzerinde bir "su kaynağı" olabilir ve kodunuzun etrafındaki aynı yükseklikte veya daha düşük olan her alanı doldurmasını sağlayabilirsiniz (özyinelemeli bir çözüm buraya güzelce sığar).

Arazi düzenleyicisi de basit olurdu, kodunuz yeterince esnekse, dönüşümleri tek bir döşemeye (değiştirdiğinize) veya bir döşeme listesine ('fırça' kullanıyorsanız) seçin ve taşıyın). Oyundaki araziyi değiştirmek için aynı kod kullanılabilir. Ve evet, VBO'daki köşeleri değiştirebilirsiniz, köşeleri başkalarını etkilemeden değiştirmek de mümkündür (bu aynı zamanda kodlamanıza da bağlıdır).


+1 Bu konudaki bilgileriniz için teşekkür ederiz. Daha önce düşünmediğim "su kaynağı" ile ilgili katman hakkında iyi bir noktaya değindin. Mümkün olduğunu bildiğim için
VBO'yu
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.