В вашем классе вы можете перегрузить символ "& lt;" оператор
класс MyClass {bool operator & lt; (const MyClass & amp; rhs) {return this- & gt; key & lt; rhs.key; }}
Координаты текстуры определяют точку в изображении текстуры, которая будет соответствовать вершине, для которой вы указываете. Подумайте о прямоугольном резиновом листе с напечатанным на нем текстурным изображением, где длина каждой стороны нормализована до диапазона 0-1. Теперь предположим, что вы хотите нарисовать треугольник, используя эту текстуру. Вы возьмете 3 булавки и поместите их в резиновый лист в позиции каждой из желаемых координат текстуры. (Скажите [0, 0], [1, 0] и [1, 1]), затем переместите эти контакты (не вынимая их) в нужные координаты вершин (скажите [0, 0], [0,5, 0] и [ 1, 1]), так что резиновый лист растягивается и изображение искажается. Это в основном то, как работают текстурные координаты.
Если вы используете текстурные координаты больше 1, и ваша текстура настроена на повторение, то это как если бы резиновый лист был бесконечным по размеру, а текстура была покрыта черепицей. Поэтому, если ваши координаты текстуры для двух вершин равны 0, 0 и 4, 0, тогда изображение должно повторяться 4 раза между этими вершинами.
@ b1nary.atr0phy Изображение для всех вас наглядных мыслителей!
Для текстур 2D-изображений 0,0 в координатах текстуры соответствует нижнему левому углу изображения, а 1,1 в координатах текстуры соответствует верхнему правому углу изображения. Обратите внимание, что «нижний левый угол изображения» находится не в центре нижнего левого пикселя, а на краю пикселя.
Также интересно при загрузке изображений:
8.5.3 Структура изображения текстуры
Самым текстурным изображением (на которое ссылаются данные) является последовательность групп значений. Первая группа - нижний левый задний угол изображения текстуры. Последующие группы заполняют ряды ширины ширины слева направо; ряды высот складываются сверху вниз, образуя единый двумерный срез изображения;
blockquote>Обратите внимание, что большинство форматов изображений имеют начало данных сверху, а не в нижней строке.
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 [ ! d2]
Координаты текстуры отображают x, y в пространство 0-1 по ширине и высоте пространства текстуры. Затем он растягивается, как резиновый лист над треугольниками. Это лучше всего объясняется фотографиями, и Красная книга делает это.