Подтвердить что ты не робот

Как работают координаты текстуры opengl?

Я знаю, что мне нужно выполнить одно из следующих действий перед каждым вызовом glVertex:

glTexCoord(0,0); 
glTexCoord(0,1); 
glTexCoord(1,1); 
glTexCoord(1,0); 

Но я понятия не имею, что они означают. Я знаю, однако, что если я умножу (или это то, что разделяет?) На правую сторону (или все ли?) На два, моя текстура расширяется, и если я делаю наоборот, моя текстура повторяется дважды. Мне удалось закодировать атлас текстуры, применяя операции до тех пор, пока они не сработают. Но у меня есть правильное представление о том, что происходит. Почему их разделение влияет на образ, и почему обратное их зеркальное отражение? Как работают координаты текстуры?

4b9b3361

Ответ 1

Координаты текстуры определяют точку в изображении текстуры, которая будет соответствовать вершине, для которой вы указываете. Подумайте о прямоугольном резиновом листе с напечатанным на нем текстурным изображением, где длина каждой стороны нормализована до диапазона 0-1. Теперь предположим, что вы хотите нарисовать треугольник, используя эту текстуру. Вы возьмете 3 булавки и поместите их в резиновый лист в позиции каждой из желаемых координат текстуры. (Скажите [0, 0], [1, 0] и [1, 1]), затем переместите эти контакты (не вынимая их) в нужные координаты вершин (скажите [0, 0], [0,5, 0] и [ 1, 1]), так что резиновый лист растягивается и изображение искажается. В основном, как работают текстурные координаты.

Если вы используете текстурные координаты больше 1, и ваша текстура настроена на повторение, то это как если бы резиновый лист был бесконечным по размеру, а текстура была покрыта черепицей. Поэтому, если ваши текстурные координаты для двух вершин равны 0, 0 и 4, 0, тогда изображение должно повторяться 4 раза между этими вершинами.

введите описание изображения здесь @b1nary.atr0phy Изображение для всех ваших визуальных мыслителей!

Ответ 2

OpenGL использует обратное текстурирование. Он берет координаты из мирового пространства (X, Y, Z) в пространство текстур (X, Y) в дискретное пространство (U, V), где дискретное пространство находится в области [0,1].

Возьмите многоугольник, подумайте об этом как лист бумаги. При этом:

glTexCoord(0,0); 
glTexCoord(0,1); 
glTexCoord(1,1); 
glTexCoord(1,0); 

Вы сообщаете OpenGL рисовать на весь лист бумаги. Когда вы применяете модификации, ваше текстурирующее пространство изменяется в соответствии с координатами ввода. Вот почему, например, когда вы делитесь, вы получаете одну и ту же текстуру дважды, вы указываете OpenGL отображать половину листа, а не весь лист бумаги.

Ответ 3

Глава 9 Красной книги подробно объясняет это и доступна для свободного онлайн.

http://www.glprogramming.com/red/chapter09.html

Координаты текстуры отображают x, y в пространство 0-1 по ширине и высоте пространства текстуры. Затем он растягивается, как резиновый лист над треугольниками. Это лучше всего объясняется фотографиями, и Красная книга делает это.

Ответ 4

Для текстур 2D-изображений 0,0 в координатах текстуры соответствует нижнему левому углу изображения, а 1,1 в координатах текстуры соответствует верхнему правому углу изображения. Обратите внимание, что "нижний левый угол изображения" находится не в центре нижнего левого пикселя, а на краю пикселя.

Также интересно при загрузке изображений:

8.5.3 Структура изображения текстуры

Само текстурное изображение (на которое ссылаются данные) представляет собой последовательность групп значений. Первая группа - нижний левый задний угол изображения текстуры. Последующие группы заполняют ряды ширины ширины слева направо; ряды высот складываются сверху вниз, образуя единый двумерный срез изображения; и фрагменты глубины укладываются сверху вниз.

Обратите внимание, что большинство форматов изображений имеют начало данных сверху, а не в нижней строке.