2011-08-23 18 views
6

Yanılıyorsam lütfen beni düzeltin. Köşe ve piksel gölgelendiricileri kullanıldığında, genellikle köşe gölgelendiricinin çıkış gl_pozisyonunu hesaplamak için kod sağlarız. Ardından, piksel gölgelendiricisindeki gl_FragCoord girişiyle ouselve'ları buluruz. Gl_position'dan gl_FragCoord'u hesaplamak için OpenGL tarafından gerçekleştirilen işlemlerin adı nedir? Bunların "projeksiyon" ve "klip koordinatları dönüşümü" olduğu doğru mu? Sonra, bu işlemler sırasında dönüşümler tam olarak ne yapıyor? Diğer bir deyişle, openGL işlevini değiştirmek için kullanabileceğim gl_FragCoord ve gl_position arasındaki matematiksel ilişki nedir? glsl'de gl_fragCoord'u gl_pozisyondan hesaplamak için kullanılan formül nedir?

herhangi katkılarından dolayı çok teşekkür ederiz.

+0

Ben aynı sorunu vardı ve önce bir süre sorgulamaya ve söz konusu o "OpenGL: GLSL pencere boşluk Koord gelen Compute göz uzay coord?" Kendim cevap var olan, sağa bir bağlantı bulabilirsiniz. – karx11erx

+0

Üzgünüm karx11erx, istediğim bu değil. Aslında, istediğimin tam tersi olduğunu düşünüyorum. "Proproject" yapmak istemiyorum, 3d koordinatlarımı 2d ekran koordinatlarına yansıtmak istiyorum. – wil

+0

Bunu nasıl yapacağınızı da görebilirsiniz, çünkü gölgelendirici ilk önce (ışık görünümü alanından) ve sonra projeyi (izleyici ekran boşluğuna) yansıtır. – karx11erx

cevap

9

gl_Position sonrası projeksiyon homojen koordinatlarla bulunmaktadır.

gl_FragCoord bir fragmanı arasında (2d) pozisyonu ise gl_Position bir tepe arasında (4d) olduğundan Bu kayda değer. meydana

işlemleri arasında, (örneğin, iç görünüm tüm olan birden çok üçgen üçgen kesim (3 köşe bir üçgen oluşturmak için, örneğin)

  • kırpma

    1. ilkel düzeneği vardır başlangıçta
    2. görünüm penceresi uygulaması)
    3. pikselleştirmeyi uymuyorsa (bu üçgenler almak ve onlardan kapalı parçaları)
    oluşturmak Eğer görüntü alanı olan 2d uzayda tepe pozisyonundan temsil edilmektedir keyfi noktasını dönüştürmek için formül bulabilirsiniz ederken

    Yani, bu oluşturulan parçaları gibi yararlı doğrudan örtüşmez kendi başına değil köşe konumu. 2d tepe koordinatı için, formül Bu gl_FragCoord değildir, yine

    2d_coord_vertex = viewport.xy + viewport.wh * (1 + gl_Position.xy/gl_Position.w)/2 
    

    olup. Daha ayrıntılı bilgi istiyorsanız GL spesifikasyonundaki rasterleştirme ayrıntılarını kontrol edin. Ne demek tam olarak ne olduğundan emin değilim

    "openGL işlevini yerine" ancak rasterleştirerek olmayan önemsiz olduğunu ve yolu kapsamı dışındadır SO cevap.

  • +0

    Cevabınız için teşekkür ederiz. Amacım gölge haritası aydınlatma gölgelendiricisini uygulamak. Sahneyi ışık konumundan (ışığın "yansıtma matrisini" kullanarak) gerçekleştirerek bir derinlik haritası (gölge haritası) oluşturdum, ancak son sahnenin köşelerini oluştururken haritanın gölge verilerini almak için hangi koordinatları kullanacağımı bilmiyorum . Ben gölge harita oluştururken gl_position oldu değeri elde etmek ışığın "izdüşüm matrisi" kullanın, sonra doğru pozisyonda gölge veri getirmek için, gölge harita oluştururken gl_fragCoord oldu değerini hesaplamak düşündüm. Çalışabilir mi? – wil

    +0

    @wil: Bunu yapmanın tipik yolu, bir dünyayı geçmek veya gl_Position (farklı bir çıktıda) ile birlikte uzay gölgelendiricisine bir uzay konumunu görüntülemektir. Bu şekilde, fragman gölgelendiricisinde, doğru enterpolasyonlu konum (ne geçtiğinize bağlı olarak, görünüm veya dünya uzayı), bir matris tarafından ışık alanına geri getirmek için dönüştürülebilir. Kısa cevap, gl_FragCoord'a güvenmeyin, ihtiyacınız olanı iletin. – Bahbar

    +0

    Tam olarak neyin peşinde olduğunuzdan emin değilim, ancak bir gölge haritası hesaplamak gibi gelmiyor. Ben buna atıfta bulunduğum şey buydu ve kendi işine çok farklı geliyor. Yeni bir soru açmanızı öneririz. Çözmeyi denediğiniz _what_ hakkında biraz bilgi edinin. – Bahbar

    İlgili konular