Gönderdiğiniz gölgelendirici koduna göre, UV'leri köşelerden enterpole etmiyorsunuz - bunun yerine 3D konumunu ( fragVert
) enterpole ettiğiniz , ardından küresel koordinatlara dönüşerek UV'leri hesapladığınız anlaşılıyor .
Mipmap seçimi, komşu piksellerde kullanılan UV'lerden sayısal olarak tahmin edilen türevlere dayandığından, analiziniz, en küçük mipmap'in bir süreksizlik olduğunda seçilmesi nedeniyle doğrudur. Bir pikselin u = 0, diğerinin u = 1 olması durumunda çok büyük bir türev elde edersiniz. Düzeltmeye çalıştığınız sorun, u = 0.01 ve u = 0.99 civarında büyük türevlerin ortaya çıkmasıyla aynı soruna sahiptir, bu nedenle orijinal dikişin her iki tarafında iki dikiş görünür.
Sorunu çözmek için nispeten basit bir yaklaşım, hangi mip seviyesinin kendiniz kullanılacağına karar vermek ve textureLod
doğrudan örneklemeye çağırmak olacaktır. Gezegen her zaman kameraya oldukça yakın olacaksa, mip seviyesini 0 olarak sabit bir şekilde kodlayabilirsiniz (veya bu nedenle dokuya mip seviyelerini eklemeyin). Aksi takdirde, noktanın kameradan uzaklığının log2'sine dayanabilir ve bazı uygun faktörlerle ölçeklendirilebilir. Bunun anizotropik filtrelemeyi etkili bir şekilde devre dışı bırakacağını unutmayın.
Daha "doğru" bir yaklaşım bazı yüksek kaliteli türevleri hesaplamak olacaktır. Bunun yerine kullanmanın dFdx
ve dFdy
nedeniyle kesintilere sahip Uvs, üzerinde atan2
, uygulamak olabilir dFdx
ve dFdy
hiç fragVert
UV türevleri almak için formülü bulmak için, sonra bazı hesap (zincir kuralı) kullanan (kürenin etrafında tüm yol sürekli olacak olan) pozisyon türevlerinden. Bu daha karmaşık ve daha yavaş olacaktır, ancak anizotropik filtrelemenin çalışması avantajı vardır.
Son olarak, OpenGL'de yeni olduğunuz için, küresel koordinatlardan UV'leri hesaplarken bir küreyi dokulamak için mükemmel geçerli bir yol olduğunu, çoğu insanın seçtiği "olağan" yol olmadığını unutmayın. Köşe başına belirtilen UV'lere sahip olan ve köşe gölgelendiricisinden piksel gölgelendiricisine (her üçgende doğrusal olarak enterpolasyonlu) geçirilen bir küre ağı oluşturmak daha yaygındır. Tepe, dikiş boyunca yerleştirilir bu şekilde tam olarak aynı pozisyonlarda her köşe iki kopyası vardır, öyle ki, ancak u yarım bir tarafında üçgen bağlı = 0 ve u ile diğer yarısı 1'e bağlı = diğer taraftaki üçgenler. Bu, görünür dikişleri ortadan kaldırır ve piksel gölgelendiricisinde herhangi bir numara gerektirmez.