Próbuję narysować prosty obiekt 3D wygenerowany przez Google SketchUp 8 Pro na mojej aplikacji WebGL, model jest prostym cylindrem.
Otworzyłem eksportowany plik i skopiowałem pozycje wierzchołków, indeksy, normalne i współrzędne tekstury do pliku .json, aby móc używać go w javascript. Wszystko wydaje się działać dobrze, z wyjątkiem współrzędnych tekstury, które mają dość duże wartości, takie jak 46,331676, a także wartości ujemne. Teraz nie wiem, czy się mylę, ale czy współrzędne tekstury 2D nie powinny mieścić się w zakresie od 0,0 do 1,0?
Cóż, narysowanie modelu przy użyciu tych współrzędnych tekstury daje mi zupełnie dziwny wygląd, i mogę zobaczyć teksturę poprawnie tylko wtedy, gdy jestem bardzo blisko (nie ja, kamera) do modelu, tak jakby tekstura była niesamowicie zmniejszone i powtarzane w nieskończoność na twarzach modelu. (tak, używam GL_REPEAT do tego zawijania tekstur)
Zauważyłem, że jeśli otrzymam wszystkie te współrzędne i podzielę je przez 10 lub 100, otrzymam znacznie „normalny” wygląd, ale nadal nie w zakresie od 0,0 do 1,0.
Oto mój plik Json: http://pastebin.com/Aa4wvGvv
Oto moje Shadery GLSL: http://pastebin.com/DR4K37T9
A oto plik .X wyeksportowany przez SketchUp: http://pastebin.com/hmYAJZWE
Próbowałem też narysować ten model za pomocą XNA, ale nadal nie działa. Korzystanie z tego modułu cieniującego HLSL: http://pastebin.com/RBgVFq08
Próbowałem wyeksportować ten sam model do różnych formatów, collada, fbx i x. Wszystko to daje tę samą rzecz.
Wygląda na to, że SketchUp nie normalizuje współrzędnych tekstury ani nie używa własnej metryki. Posiadanie texcoordów <0 lub> 1 i GL_REPEAT jako zawijania tekstury oznacza, że tekstura zostanie przeskalowana w dół, aby dopasować ją do geometrii i powtórzona poziomo i pionowo.
Spróbuj zaimportować siatkę do innego pakietu modelującego (MilkShape, Blender) i stamtąd naprawić mapę UV.
źródło