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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • Недостаток глушителя в Mac OSX 10.9, IDE: создатель QT
  • Почему GL разделяет `gl_Position` на W для вас, а не позволяет вам сделать это самостоятельно?
  • Как рисовать текст с помощью GLUT / OpenGL на C ++?
  • glVertexAttribPointer и glVertexAttribFormat: В чем разница?
  • VBOs с std :: vector
  • Как получить библиотеку / заголовки GL?
  • Нормальное отображение ужасно ошибочно
  • OpenGL 2 Texture Внутренние форматы GL_RGB8I, GL_RGB32UI и т. Д.
  • Как отладить шейдер GLSL?
  • OpenGL - вершинные нормали в OBJ
  • Поворот группы векторов
  • Давайте будем гением компьютера.