2010-11-20 16 views
7

OpenGL'de bir geometri gölgelendiriciyle katman oluşturma işlemi, bazı sürücülerde/donanımlarda biraz tehlikeli gibi göründüğünden, işlevselliği kendi çözümümle değiştirmek isterim. Bu, rendertarget gibi büyük bir doku kullanarak, örneğin 300²'lik bir çözünürlükle. Daha sonra, dokuda 100² parçaya işlenerek katman oluşturma işlemini simüle etme. Aşağıda mockup görüldüğü gibi bu çözünürlük sayesinde 9 fayans/katmanları neden olacaktır:Tekstürün parçalarına bölünüyor

Tiles

sorudur; OpenGL ile bunun nasıl? Bir geçişte farklı fayanslara sahneyi oluşturan bir geometri gölgesi yardımıyla sözde.

cevap

2

Bunu yapmanın kolay bir yolu yoktur. Geometri gölgelendiriciyi birlikte kesmek için kullanabilirsiniz, ancak büyük olasılıkla yavaş olacaktır, çünkü çok fazla geometri gösterimine sahip olmalısınız ve daha sonra köşe gölgelendiricisi oyunun dışında olduğu için köşe gölgelendirme için geometri gölgelendiricisini kullanmalısınız.

sorununa

Temel yaklaşım:

  • bırak vertex shader boş ve sadece geometri shader olarak
  • değişmeden köşe her üçgenin 8 yeni örneklerini (beraberce 9 üçgenler olacaktır) her günü
  • oluşturmak dönmek Üçgenler üçgeni yansıtacak bir fonksiyon çalıştırır. Ekran görüntüsüne göre, geometri gölgelendiricisine gönderilecek 9 farklı görünüm matrisine ihtiyacınız olacak.
  • Şimdi üçgeni düzenleyin, böylece her biri görüntünün farklı bir kısmında oluşturulur. Projeksiyondan sonra koordinatların [-1; 1] Yani her üçgenin koordinatlarını 3'e bölmeniz ve sonra ilgili üçgenleri 1/3 çarpmalarla değiştirmeniz gerekir.
  • Her piksel için phong gölgelendirme hesaplarsanız, parça gölgelendiricinin bölünmüş ekran hakkında hiçbir ipucu içermediğinden ve 9 farklı kamera konumunuz olduğundan, makine konumunu parça gölgelendiricisine her köşe noktasıyla göndermeniz gerekir.
  • +0

    İyi bir yanıt için teşekkürler. Belki de GPU yapımcısının sürücülerini bir araya getirmesini beklemeliyim (ATI). Bu nedenle, oluşturma katmanlarını bunun yerine bir "texture2Darray" öğesine destekliyorlar. –

    +0

    Evet, kesinlikle. Soru, eğer ATI sürücülerinin düzgün çalışmasını sağlayacaksa ... –

    İlgili konular