проблемы с координатой текстуры в формате Obj

насколько я знаю, координаты текстуры должны находиться в диапазоне [0,1], но в этом файле obj координаты текстуры, похоже, находятся в диапазоне [0,2]

vt 2.0000 2.0000 0.0000
vt 1.7500 2.0000 0.0000
vt 1.7500 1.9750 0.0000
vt 2.0000 1.9750 0.0000
vt 1.7500 1.9500 0.0000
vt 2.0000 1.9500 0.0000
vt 1.7500 1.9250 0.0000
vt 2.0000 1.9250 0.0000
vt 1.7500 1.9000 0.0000
vt 2.0000 1.9000 0.0000
vt 1.5000 2.0000 0.0000
vt 1.5000 1.9750 0.0000
vt 1.5000 1.9500 0.0000
vt 1.5000 1.9250 0.0000
vt 1.5000 1.9000 0.0000
vt 1.2500 2.0000 0.0000
vt 1.2500 1.9750 0.0000
vt 1.2500 1.9500 0.0000
vt 1.2500 1.9250 0.0000
vt 1.2500 1.9000 0.0000
vt 1.0000 2.0000 0.0000
vt 1.0000 1.9750 0.0000
vt 1.0000 1.9500 0.0000
vt 1.0000 1.9250 0.0000

Почему ординаты текстуры здесь могут быть больше 1? Кто-нибудь может мне это объяснить? Спасибо!

вы видите, что текстура кажется странной введите здесь описание изображения


person yvetterowe    schedule 16.10.2011    source источник


Ответы (1)


Ожидается, что значения UV-текстуры за пределами [0,1] будут мозаичными.

Я никогда не видел такого явного указания ни в одной из неофициальных спецификаций OBJ, но это имитирует поведение OpenGL.

Вот соответствующая цитата из красной книги OpenGL:

Вы можете назначить координаты текстуры за пределами диапазона [0,1] и либо зафиксировать, либо повторить их в текстурной карте. С повторяющимися текстурами, если у вас есть большая плоскость с текстурными координатами от 0,0 до 10,0 в обоих направлениях, например, вы получите 100 копий текстуры, сложенных вместе на экране. Во время повторения целая часть текстурных координат игнорируется, а копии текстурной карты замостили поверхность. Для большинства приложений, где текстура должна повторяться, тексели в верхней части текстуры должны совпадать с текселями в нижней части, и аналогично для левого и правого краев.

person nsanders    schedule 16.10.2011
comment
Зачем листать? Наиболее распространенное поведение - это просто повторение, а не перелистывание... (другие возможности - перелистывание или зажим). - person 6502; 16.10.2011
comment
@nsanders: спасибо за ответ! поэтому я добавляю glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); в мою программу, но текстура все равно выглядит убогой :( Не знаете как решить проблему? - person yvetterowe; 16.10.2011
comment
Как это должно выглядеть? Вы уверены, что карта текстур не просто испорчена? Попробуйте загрузить его в Blender (или аналогичный инструмент для 3D-моделирования). Это укажет, что это ваш код или модель неверна. - person nsanders; 16.10.2011