2012-11-17 22 views
8

glPolygonOffset işlevindeki ilk parametrenin anlamını anlamakta güçlük çekiyorum. Faktör parametresinin anlamı ve kullanımı glPolygonOffset

void glPolygonOffset(GLfloat factor, GLfloat units); 

The official documentation

faktör

her poligon için ofset değişken derinlik yaratmak için kullanılan bir ölçek faktörünü belirler söylüyor.

ve uygun köşe derinliği değerlerinden interpolasyon sonra her fragmanı derinlik değeri ofset olacağı

. Ofsetin değeri, DZ'nin poligonun ekran alanına göre derinlikteki değişimin bir ölçümüdür ve r, verilen bir verim için çözülebilir bir ofset üretmesi garantilenen en küçük değer olan faktör × DZ + r × birimleridir. uygulanması.

r ve unit'un ne olduğunu anlıyorum. Anlamadığım şey, DZ'un ne olduğu, yani "poligonun ekran alanına olan derinlik değerindeki değişimin ölçümü" ile kastedilen nedir ve neden faktörü 0'dan başka hiçbir şeye ayarlamam gerekecek? 0

Tel kafesimin ofset olmasını istiyorsam, tek ihtiyacım olan şey, derinlik değerine çift/birim bir kaç birim eklemek/eklemek, değil mi? Faktör parametresinin (ve belgede belirtilen DZ) anlamı, amacı ve kullanım örneği nedir?

cevap

8

Burada bazı cehaleti itiraf etmeliyim, ancak bunu açıklayan this article buldum. Dediler ki:

görsel eserler olmadan vurgulanan katı nesnenin güzel render ulaşmak için, katı nesnenin (sizden uzağa doğru itin) veya tel kafes için Eksiye ofset olumlu ekleyebilir ya (pull size doğru). Büyük soru şu: "Ne kadar kayma yeterlidir?" Ne yazık ki, gerekli ofset, her bir poligonun derinlik eğimi ve tel kafes içindeki çizgilerin genişliği dahil olmak üzere çeşitli faktörlere bağlıdır.

Daha sonra derinlik Eğim, bu şekilde açıklanmaktadır: Bir çokgen çapraz olarak

derinlik eğim, x ve y koordinatları, ya değişiklik bölü Z (derinlik) değerleri değişimdir. Derinlik değerleri pencere koordinatlarındadır, [0, 1] aralığına sıkıştırılmıştır. Bir poligonun maksimum derinlik eğimini tahmin etmek için (ofset denkleminde m), bu formülü kullanın: m = max {| delV/delS |, | delV/delT |}. yakın ve uzak kırpma düzlemlerine paralel olan poligonlar için

, derinlik eğimi sıfırdır: (del kısmi türevi olduğu)

Böylece olduğu sonucuna varılmıştır. [...] Kırpma düzlemlerine büyük bir açıda olan çokgenler için, derinlik eğimi sıfıra göre önemli ölçüde daha büyük olabilir ve daha büyük bir ofset gerekebilir. 0.75 veya 1.0 gibi faktör için küçük, sıfır olmayan değerler, farklı derinlik değerleri oluşturmak ve hoş olmayan görsel nesneleri ortadan kaldırmak için yeterlidir.