Bu UV doku koordinatlarını anlayamıyorum (aralık 0,0 - 1,0 DEĞİL)


9

Google SketchUp 8 Pro tarafından oluşturulan basit bir 3D nesneyi WebGL uygulamama çizmeye çalışıyorum, model basit bir silindir.

Dışa aktarılan dosyayı açtım ve javascript üzerinde kullanabilmek için köşe pozisyonlarını, indeksleri, normalleri ve doku koordinatlarını bir .json dosyasına kopyaladım. 46.331676 ve ayrıca negatif değerler gibi oldukça büyük değerleri olan doku koordinatları dışında her şey iyi çalışıyor gibi görünüyor. Şimdi yanlış olup olmadığımı bilmiyorum, ancak 2B doku koordinatlarının yalnızca 0.0 ile 1.0 arasında olması gerekiyor mu?

Modeli bu doku koordinatlarını kullanarak çizmek bana tamamen garip bir görünüm kazandırıyor ve dokuyu ancak doku delicesine sanki modele çok yakın olduğumda (gerçekten ben, kamera değil) düzgün bir şekilde görebiliyorum. boyutunda küçültülür ve modelin yüzlerinde sonsuz tekrarlanır. (evet, bu doku sarma şeyinde GL_REPEAT kullanıyorum)

Tüm bu koordinatları alıp 10 veya 100'e bölersem çok "normal" bir görünüm elde edersem, ancak yine de 0.0 ila 1.0 aralığında değil.

İşte benim json dosyam: http://pastebin.com/Aa4wvGvv

İşte GLSL Gölgelendiricilerim: http://pastebin.com/DR4K37T9

İşte SketchUp tarafından dışa aktarılan .X dosyası: http://pastebin.com/hmYAJZWE

Ayrıca XNA kullanarak bu modeli çizmeye çalıştım, ama hala çalışmıyor. Bu HLSL gölgelendiricileri kullanma: http://pastebin.com/RBgVFq08

Aynı modeli farklı formatlara, kolajda, fbx ve x'e aktarmayı denedim. Bütün bunlar aynı şeyi verir.

Yanıtlar:


8

Doğru UV'ler tipik olarak 0-1 arasındadır, ancak David X bunun bir gereklilik olmadığını belirtti. Sizin durumunuzda sorun, SketchUp tarafından oluşturulan UV koordinatlarının sıklığıdır. Örneğin, Y ekseniniz (V koordinatı) 0'dan 46'ya giderse, sarma etkinleştirilirse, doku V yönünde 46 kez tekrarlanır. Sarma işlemi daha küçük görünmesini sağlar çünkü görüntüyü aynı yüzey alanında birçok kez çoğaltmanız gerekir. FBX veya Collada olarak yeniden dışa aktarma sorunu çözmek için hiçbir şey yapmaz, çünkü her iki şekilde de aynı UV'dir. Bunu düzeltmek için SketchUp'a geri dönmeli ve silindir için UV üretme şeklini değiştirmelisiniz. UV aralığını kendiniz belirtebilirsiniz ya da geometrinin nasıl parametreleneceğini değiştirmeniz gerekebilir. SketchUp'ı hiç kullanmadım, bu yüzden yapmıyorum

Son olarak, silindirin tepe sargısı küplerinizin tam tersi olabilir. OpenGL ve DirectX gibi grafik API'leri, üçgenin hangi yöne baktığını belirlemek için üçgen tepe sargısı kullanır. Bu şekilde arka yüz kaldırma işlemini gerçekleştirir - bir optimizasyon olarak kameradan uzağa bakan üçgenleri oluşturmaz. Silindirin olması durumunda, görüşün silindire baktığı görülüyor çünkü kameraya en yakın üçgenler yanlış yöne bakıyor. Bu, SketchUp'ta çözülmesi gereken bir konudur ve her bir üçgen için normal yüzün yönüne bakarak doğrulanabilir (içe değil, dışa dönük olmalıdır).


1

(Doku koordinatları kesinlikle 0-1 dışında olabilir.) Bence bu sadece OpenGL'nin garip olması. IIRC, Küreler, 0-1 kareyi yüzeyin ~ 1 / 16'sına yerleştiren doku koordinatları kullanır ve Silindirler benzer bir şey yaparsa şaşırmazdım. Doğru olarak, uygun doku koordinatlarını düzenleyerek kendi silindir kodunuzu yazmanız gerekebilir.


1

UV koordinatlarınızın tam olarak 0 ile 1 arasında olmasını istiyorsanız, modeliniz için bir ölçek matrisi kullanabilirsiniz.

Böylece modelinizi yüklerken, maksimum u ve v koordinatınızı kontrol edebilir ve daha "normal" hale getirecek bir ölçeklendirme matrisi oluşturabilirsiniz. Böylece 10 veya 100'lük manuel ölçeklemenizin yerini alacaktır. Bu yüzden sığmasını sağlamak için uv koordinatlarınızı [0,1] değerine ölçeklendirmeniz gerekir.

|1/uMax|0     |
|0     |1/vMax|

Tabii ki bu sadece bir çözüm ve Sketchup'ı doğru ayarlarda ayarlamanın daha iyi bir yolunu bulabilirdim (ihracatçınızın veya Sketchup'ın kendisinin burada yanlış gittiğini düşünüyorum). Ancak sizin için işe yaramazsa, yükleme sonrası işlemcinizi oluşturun ve doku ölçeklendirme matrisini kaydedin.


@Marmix Bu çok basit, etkili ve zarif bir çözüm !!!
3d-indiana-jones

0

SketchUp, doku koordinatlarınızı normalleştirmiyor veya kendi metriğini kullanmıyor gibi görünüyor. Doku sarımı olarak <0 veya> 1 ve GL_REPEAT karakterlerine sahip olmak, dokunun geometriye uyacak şekilde ölçekleneceği ve yatay ve dikey olarak tekrarlanacağı anlamına gelir.

Mesh'i başka bir modelleme paketine (MilkShape, Blender) aktarmayı ve uv haritasını oradan sabitlemeyi deneyin.


4
Doku sarımı olarak <0 veya> 1 ve GL_REPEAT karakterlerine sahip olmak, dokunun yatay ve dikey olarak tekrarlanacağı [ hatalı ifadeyi kaldıracağı ] anlamına gelir .
Kromster
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.