К элементам вектора можно обращаться и по индексу. Например, positiоп[2] возвращает третий элемент вектора posi ti on. В качестве индекса можно подставлять значение переменной, что позволяет организовать цикл по компонентам вектора. Операция умножения векторов существует и осуществляется так же, как линейное умножение обычных матриц. Настройка по адресам, индексирование и другие операции будут подробно рассматриваться в разделе 3.7.
3.2.3. Матрицы
В языке существуют также встроенные типы матриц из чисел с плавающей запятой - размером 2x2, 3x3 и 4x4:
□ nat2 - матрица из чисел с плавающей запятой размером 2x2;
□ snat3 - матрица из чисел с плавающей запятой размером 3x3;
□ mat4 - матрица из чисел с плавающей запятой размером 4x4.
В переменных этих типов можно хранить данные для линейных преобразований или какие-либо другие. При выполнении операций над этими типами они всегда рассматриваются как математические матрицы, в частности, при перемножении вектора и матрицы выполняются правильные с математической точки зрения вычисления. Представлять матрицы в OpenGL принято по столбцам.
Матрицу можно рассматривать также как массив столбцов-векторов: например, если переменная transform типа mat4, то transforn[2] - третий столбец матрицы transform, и его тип будет vec4. Индекс первого столбца 0. Так как transformez] - вектор, а векторы являются и массивами, transform[3J[l] - второй элемент вектора из четвертого столбца матрицы transform. Таким образом, мы можем рассматривать transform еще и как двухмерный массив. Следует лишь учитывать, что первый индекс выбирает столбец, а не строку, а уже второй индекс выбирает строку.
Определение языка
3.2.4. Дискретизаторы
Чтобы получить нужную текстуру, нужно указать ее и/или ее текстурный модуль. В стандарте OpenGL не определено, как и в каком виде будут реализованы текстурные модули или другие способы организации хранения текстур. Вместо этого OpenGL предоставляет некий абстрактный «черный ящик»- для доступа к текстуре. Такие «черные ящики» называются дискретизаторами (семше-рами).