Bir aynayı veya diğer yansıtıcı yüzeyleri nasıl oluştururum?


16

Bir 3D oyun içinde nasıl ayna oluşturacağımı merak ettim. Benim önerim ışınları izlemek / "ayna" nesnesine vurmak ve daha sonra orijinal kameranın ayna "noktasında" bulunan "ayna" nesnesine ikinci bir kamın bir resmini ayna nesnesinin isabet tarafını kullanarak çizmektir. yansıtma düzlemi.

Görme merkezinin ayna düzleminde bulunduğu noktayı belirlemek için orijinal kameranın merkezinden gelen bir ışını kullanmamız gerekir.


1
Bu şeyin "nasıl demek istediğimi" gösteren bir çizim / çizim yapmak ister misiniz?
daemonfire300

Doğrudan oyun geliştirme ile ilgili olmadığı için stackoverflow.com'da yayınlamayı deneyebilirsiniz ; belki de size yardımcı olabilecek daha fazla grafik uzmanı vardır.
Ricket

Yanıtlar:


14

OpenGL kullanıyorsanız, OpenGL SSS bölüm 9: Dönüşümler tam olarak nasıl yapılacağını kapsar. Ve hayır, raytracing içermiyor, çünkü bu bunu başarmanın çok verimsiz (ancak yüksek kaliteli) bir yoludur.

9.170 Aynayı nasıl oluşturabilirim?

Temel olarak SSS girişinin söyledikleri ve örnek kod şunları göstermektedir:

  • Yansıyan görünüm matrisi oluşturun. Bunu eksene hizalanmış aynalar için yapmak ikinci paragrafta açıklanmaktadır.
  • Sahneyi çizin
  • Görünüm matrisini geri yükleme ve derinlik arabelleğini temizleme
  • Sahneyi yeniden işleyin; bu sahnedeki gerçek ayna geometrisi, daha önce oluşturulmuş aynalı sahneyi göstermek için yarı saydam veya tamamen şeffaf olmalıdır.

Açıkçası optimizasyon için çok yer var. Yansıtılan sahneyi oluştururken, aynalar tipik olarak küçük olduğundan ve varsayılan ekran dışı culling, ekranda olan ancak aynadan görülmeyen geometri için devreye girmeyeceğinden, muhtemelen mümkün olduğunca ayıklama yapmanız gerekir. Aynanın sadece sahnenin basitleştirilmiş bir sürümünü de oluşturabilirsiniz. Efektler için ve kullanıcının düşük kaliteyi fark etmesini engellemek için, yansıtılmış görüntünüzü yaparken bir gölgelendirici (örn. Bulanıklık veya belki parlak / soluk) uygulayabilirsiniz.

DirectX kullanıyorsanız, prosedürün aynı olacağını hayal ediyorum.


3
Bir alternatif, render süresinden daha fazla belleğiniz varsa, dünya geometrinizi 3D editörünüzdeki aynadan yansıtmaktır, o zaman istediğiniz gibi değiştirebilirsiniz (daha düşük mip seviyelerini zorlayın, vb.). Bunu, parlak bir katta oturan şeylerin yeraltında çoğaltıldığı / ters çevrildiği ve zeminin kendisinin yarı saydam hale getirildiği PS1'de yaptık.
dash-tom-bang

Örnek kodun kullanımdan kaldırılmış OpenGL belirtimine başvurduğunu unutmayın . Bununla birlikte konsept evrenseldir ve muhtemelen en yeni OpenGL spesifikasyonu kullanılarak benzer şekilde uygulanabilir .
patryk.beza
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.