3.2,2. Векторы

В языке шейдеров OpenGL есть встроенные типы векторов из чисел с плавающей запятой (float), целых (int) или булевых (bool). Существуют разные типы для двух-, трех- и четырехэлементных векторов:

□ vec2 - вектор из двух чисел с плавающей запятой;

□ v.ec3 - вектор из трех чисел с плавающей запятой;

□ vec4 - вектор из четырех чисел с плавающей запятой;

□ i vec2 - вектор из двух целых;

□ i vec3 - вектор из трех целых;

□ i vec4 - вектор из четырех целых;

□ bvec2 - вектор из двух булевых значений;

□ bvec3 - вектор из трех булевых значений;

□ bvec4 - вектор из четырех булевых значений.

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

3,2. Типы данных

Компилятор не способен самостоятельно отличить вектор цвета или координат от вектора с другими значениями. С точки зрения языка все они - лишь векторы чисел с плавающей запятой.

Элементы вектора можно адресовать как по именам (как в структурах), так м по индексам (как в массивах). Например, пусть posi ti on - переменная типа vec3, она трактуется как вектор (лг, у, 2), и к первому элементу вектора можно обратиться position, х.

Существует несколько видов адресации векторов по именам:

□ х, У, z, w - вектор рассматривается как координаты или направление;

□ г, g, Ь, а - вектор рассматривается как значение цвета; О s, t, р, q - вектор рассматривается как координаты текстуры.

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


⇐ Предыдущая| |Следующая ⇒