2009-02-27 10 views
5

iPhone'da OpenGL ES'de yansımaları işlemek için alternatif bir teknik arıyorum. Genellikle, yansımanın görülebileceğini (yansıtıcı yüzey) işaretlemek için şablon arabelleğini kullanarak ve tersine döndürülen görüntüyü yalnızca bu piksellerde oluşturacak şekilde yapardım. Böylece, yansıtılan nesne yüzeye doğru hareket ettiğinde, yansıması artık görülmez. Ancak, iPhone'un uygulaması şablon arabelleğini desteklemediğinden, yüzeyin dışındaki yansıma kısımlarının nasıl gizleneceğini belirleyemiyorum.Fotoğraf stüdyosu olmadan iPhone'da OpenGL ES'de yansımaları nasıl açabilirim?

Açıklığa kavuşturmak gerekirse, sorun yansımaları kendileri oluşturmuyor, ancak görünür olmayacaklarında gizliyor.

Herhangi bir fikrin var mı? Temel ön yüz/arka yüz tespiti gerçekleştirmek

: Ben şablon tamponu olmadan gölgeleri nasıl olduğumu

cevap

9

Yansıyan sahneyi önce yansıtır; glCopyTexImage2D kullanarak bir dokuya kopyalayın; framebuffer'ı temizle; kopyalanan dokuyu yansıtıcı yüzeye uygulayarak sahneyi düzgün çizin.

2

Burada yansımaları için bir cevap var, ama yok belki de size bir fikir verecektir var ağın ışık kaynağı açısından bakıldığında. Sonra bir ön üçgeni arka üçgene bağlayan tüm kenarların bir listesini alırım. Bu kenar listesini çizgi "döngü" olarak ele alıyorum. Bu ilmiğin köşelerini, nesne-ışık ışını boyunca, zemini kesişene kadar projelendiriyorum. Bu kesişim noktaları daha sonra, zemin ile aynı düzlemde bir 2D çokgen hesaplamak için kullanılır. Sonra bu poligeni üçgenlere dönüştürmek için bir tesselasyon algoritması kullanıyorum. (Bu, ışık kaynakları veya nesneler çok sık hareket etmediği sürece iyi çalışır.)

Üçgenleri aldığımda, derinlik arabelleğinin gölgenin geçmesine izin verecek şekilde küçük bir ofset oluşturur. Alternatif olarak, decaling algorithm such as the one in the Red Book'u kullanabilirsiniz.