Я пытаюсь нарисовать простой трехмерный объект, сгенерированный Google SketchUp 8 Pro, в моем приложении WebGL, модель представляет собой простой цилиндр.
Я открыл экспортированный файл и скопировал положения вершин, индексы, нормали и координаты текстуры в файл .json, чтобы иметь возможность использовать его в javascript. Кажется, все работает нормально, за исключением координат текстуры, которые имеют довольно большие значения, такие как 46.331676, а также отрицательные значения. Теперь я не знаю, ошибаюсь ли я, но разве координаты 2D-текстуры не должны находиться в диапазоне от 0,0 до 1,0?
Ну, рисование модели с использованием этих текстурных координат дает мне совершенно странный вид, и я могу видеть текстуру правильно только тогда, когда я очень близко (не совсем я, камера) к модели, как если бы текстура была безумно уменьшен в размере и повторяется бесконечно по лицам модели. (да, я использую GL_REPEAT для этой текстуры)
Я заметил, что если я получу все эти координаты и разделю их на 10 или 100, я получу «нормальный» вид, но все же не в диапазоне от 0,0 до 1,0.
Вот мой файл JSON: http://pastebin.com/Aa4wvGvv
Вот мои шейдеры GLSL: http://pastebin.com/DR4K37T9
А вот файл .X, экспортированный SketchUp: http://pastebin.com/hmYAJZWE
Я также пытался нарисовать эту модель с использованием XNA, но все еще не работает. Используя этот HLSL шейдеры: http://pastebin.com/RBgVFq08
Я попытался экспортировать одну и ту же модель в разные форматы, collada, fbx и x. Все это дает одно и то же.
Похоже, SketchUp не нормализует ваши координаты текстуры или не использует собственную метрику. Наличие texcoords <0 или> 1 и GL_REPEAT в качестве обтекания текстуры означает, что текстура будет уменьшена, чтобы соответствовать геометрии и повторена по горизонтали и вертикали.
Попробуйте импортировать сетку в другой пакет моделирования (MilkShape, Blender) и исправить там ультрафиолетовую карту.
источник