Çıkartma uygulaması


11

Çıkartmalar hakkında bilgi bulma konusunda sorun yaşadım, bu yüzden bu soru başkalarına yardımcı olacaktır. Uygulama ileri bir oluşturucu içindir.

Birisi çıkartma uygulamasının doğru olup olmadığını doğrulayabilir mi?

  • Ortak alanda projeksiyon hacmini tanımlayacak herhangi bir boyutta bir küp tanımlarsınız. Yansıtmanın etkileyeceği üçgenleri almak için tanımlanan küple üçgen kesişimini kontrol edin.
  • Bu üçgenleri kırpıp kaydedersiniz.
  • Ardından, yansıttığınız dokuya başvuracak kaydedilen üçgenlerin UV koordinatlarını hesaplamak için matris hileleri kullanırsınız.
  • Bunu yapmak için ortak alandaki küpün yüksekliğini, genişliğini ve derinliğini temsil eden vektörleri alırsınız, böylece sol alt köşe başlangıç ​​noktasıdır.
  • Bunu bir matrise i, j, k birim vektörleri olarak koyarsınız, küpün çevirisini ayarlarsınız, sonra bu matrisi ters çevirirsiniz.
  • Kaydedilen üçgenlerin köşelerini bu matrisle çarparsınız, böylece koordinatları UV koordinatları olarak kullandığınız 0-1 boyutunda bir küpün içine alırsınız.
  • Bu şekilde, üzerine yansıttığınız orijinal üçgenlere sahip olursunuz ve onlar için UV koordinatlarınız olur (UV koordinatları, yansıttığınız dokuya referans verir).
  • Sonra kaydedilen üçgenleri sahneye tekrar gönderirsiniz ve yansıtılan görüntüyle yansıtma alanının üzerine yazarlar.

Şimdi cevap bulamadığım sorular. Son nokta doğru mu? Hiçbir zaman yazılım kırpma yapmadım, ancak sınırlı hassasiyet nedeniyle yeterince eğilimli bir hata gibi görünüyor, yansıtılan doku için bazı z dövüşü olacak. Ayrıca UV koordinatlarını doğru bir şekilde almanın yolu var mı?


İşte bağlantıları olan bir bağlantı: gamedev.stackexchange.com/questions/24653/…
Luis Estrada

Yanıtlar:


5

Bu makaleye bir göz atın:

http://blog.wolfire.com/2009/06/how-to-project-decals/

Görünüşe göre kullandığınız yaklaşımın aynısını kullanıyor. Z-dövüşünden bahsetmiyor, ama kesinlikle daha büyük mesafelerde bir sorun haline gelebilir.

Benim önerim, z-dövüşü çok görünür hale gelirse, belirli bir mesafeden sonra çıkartmaları devre dışı bırakmak olacaktır.


Bu makaleyi birçok kez gördüm, mesele, bahsettiğim gibi, z dövüşü gerçekten bir mesafe meselesi değil, sadece sorduğum şey hakkında konuşmuyor Mevcut geometrinin hemen üstünde yer almaya çalışıyorsunuz ve sınırlı hassasiyet nedeniyle, üstte veya tam olarak aynı yerde olacağından emin olamaz mısınız?
dreta

1
Çıkartmalar çizerken, derinlik arabellek karşılaştırma işlevini her zaman daha az yerine eşit veya daha az olarak ayarlayabilirsiniz, böylece etiketler her zaman etkilendikleri yüzeyin üzerine çizilir.
jmegaffin

1

Z dövüşünü çözmek için yaptığım şey, ekran koordinatlarından sonra, tepe etiketinin gölgesinde tepe noktasının Z değerini küçük bir miktarla çarpmaktı.

TAMAM ..... Takılı örgü çıkartmaları kullanıyorum. Y, arazide otururken bir ağ nxn oluşturuyorum. Çokgen örgülerdeki Y'yi bulmak için kod kullanıyorum. Tüm transfromlardan sonra, ekran koordinatlarında mevcut geometrinin üstünü çiziyorum. Derinlik tamponu, ekran koordinatlarındadır, bu nedenle, çokgenlerin Z'sini ekrana doğru biraz hareket ettirerek Z dövüşünü durdurur. Bunu yaparak, takılan çıkartma ağlarımı oluşturan çokgen miktarını yarıya indirdim. Bu eski 120 kod

 vec4 v = gl_ModelViewProjectionMatrix * gl_Vertex;
 v.z -= .03;
 gl_Position = v;

Umarım bu daha iyi açıklar .. (istendiği gibi)

Tüm tel çerçeve.

Sadece tel alanı.


1
Bu cevap özellikle kısa ve belirsiz görünüyor. Cevabınızı açıklığa kavuşturabilir misiniz?
Gnemlock

1
Anlamak zor değil .. Ekran alanında Z yönlendirmesinde sadece biraz tepe noktasını hareket ettiriyorum. Çünkü OpenGL'de ekran alanında her zaman pozitif Z'ye bakıyorsunuz, Z negatifini küçük bir miktar hareket ettirmek Z dövüşünü düzeltiyor. Bununla birlikte bir sorun var .. Uzaklaştırdıkça, z çıkartmayı gereğinden fazla hareket ettirebilir.
Mike O
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.