2010-09-24 18 views
5

OpenGL'ye yeni geliyorum. JOGL kullanıyorum.OpenGL: Gökyüzü kutusu oluştur?

Dünyam için bulutlarla veya yıldızlarla doku oluşturabileceğim bir gökyüzü oluşturmak istiyorum. Bunu yapmanın en iyi yolunun ne olduğundan emin değilim. İlk içgüdüm, dörtgen yönelim GLU_INSIDE ile gerçekten büyük bir küre yapmak ve doku. Daha iyi bir yolu var mı?

+0

Burada bir tane [jogl cube map sample] (https://github.com/java-opengl-labs/jogl-samples/blob/master/jogl-samples/src/tests/gl_320/texture/Gl_320_texture_cube.java) – elect

cevap

5

Evet.

Gerçekten büyük bir küre oluşturmak iki önemli soruna sahiptir. İlk olarak, kırpma ile ilgili sorunlarla karşılaşabilirsiniz. Uzak kırpma mesafenizin dışındaysa gökyüzü kaybolabilir. Ek olarak, gök kutunuza bir mesafeden giren nesneler görsel olarak çok sağlam bir duvardan geçecektir. İkincisi, çok basit bir etki için çok fazla poligon (ve çok acı) harcıyorsunuz. Çoğu kişi aslında küçük bir küp kullanır (Bu nedenle "Sky box" adı). Küpün ön geçişte derinlik testi kapalı olarak yapılması gerekir. Böylece, tüm nesneler size gerçek mesafelerinden bağımsız olarak küpün üstünde işlenecektir. Sadece bir tarafın uzunluğunun, yakındaki kırpma mesafenizin iki katından daha büyük olduğundan emin olun ve iyi olmalısınız.

10

Bir gökyüzü kutusu gitmek için oldukça iyi bir yoldur. Bunun için bir cube map kullanmak isteyeceksiniz. Temel olarak, kameranın etrafında bir küp oluşturup küpün her yüzünün içine bir doku çiziyorsunuz. OpenGL'nin bunu sabit işlevli boru hattına dahil edebileceğine inanıyorum, ancak gölgelendirici yaklaşımını kullanmanız durumunda (sabit işlev yine de kullanımdan kaldırılmışsa), küp haritası örnekleyicilerini (GLCL'den emin değilken Cg'de samplerCUBE) kullanmak isteyeceksiniz. Küp haritasini çizerken, ayni zamanda, modelview matrisinden çeviriyi kaldirmak istiyorsaniz, ancak rotasyonun devam etmesini saglarsiniz (bu, gök kutunun kamerayı "takip etmesine neden olur, ancak gökyüzünün farklı kısımlarına bakmanıza olanak verir).

Yapılması gereken en iyi şey, tüm opak nesnelerini çizen görüntülemeden sonra küp haritasını çizmektir. Bu garip gelebilir çünkü varsayılan olarak gökyüzü diğer nesneleri engelleyecektir, ancak bunu önlemek için aşağıdaki numarayı kullanırsınız (gölgelendiriciler kullanıyorsanız): Vertex gölgelendiricisindeki son çıktı konumunu yazarken, .xyzw yazmak yerine, .xyww yazın . Bu, gökyüzünü, her şeyin arkasında olmasına neden olan uzak düzleme zorlar. Bunun avantajı kesinlikle 0 overdraw var!

+0

+1 - Aşırı çekimle ilgili iyi nokta. Genel olarak, bu cevap benimkinden daha eksiksiz. – Andres

0

Küreler, bazı durumlarda görülebilen bozulmaları, köşeleri, vb. Bir başka olasılık bir silindirdir.

Gerçekten yüksek kaliteli bir gökyüzü için, bir gökyüzü aydınlatma simülasyonu oluşturabilir, zamana bağlı olarak küre renklerini ayarlayabilir (=> güneş pozisyonu!) Ve yönünü ve gökyüzünü küre ile görünüm arasında bazı nesneler olarak 3B nesneler olarak ekleyebilirsiniz. konumu.