Uniform

Униформы являются глобальными GLSL переменными. Они передаются в шейдерные программы.

Пример

При объявлении формы ShaderMaterial она объявляется по значению или по объекту.

uniforms: { time: { value: 1.0 }, resolution: new Uniform(new Vector2()) };

Типы Униформ

Каждая униформа должна иметь свойство value. Тип значения должен соответствовать типу однородной переменной в коде GLSL, как указано для примитивных типов GLSL в таблице ниже. Также поддерживаются унифицированные структуры и массивы. Массивы GLSL примитивного типа должны быть заданы либо как массив соответствующих объектов v3d, либо как плоский массив, содержащий данные всех объектов. Другими словами, GLSL-примитивы в массивах не должны быть представлены массивами. Это правило не применяется транзитивно. Массив массивов vec2, каждый из которых имеет длину пять векторов, должен быть массивом массивов, состоящим либо из пяти объектов Vector2, либо из десяти number.

Uniform types
GLSL type JavaScript type
int Number
uint (WebGL 2) Number
float Number
bool Boolean
bool Number
vec2 v3d.Vector2
vec2 Float32Array (*)
vec2 Array (*)
vec3 v3d.Vector3
vec3 v3d.Color
vec3 Float32Array (*)
vec3 Array (*)
vec4 v3d.Vector4
vec4 v3d.Quaternion
vec4 Float32Array (*)
vec4 Array (*)
mat2 Float32Array (*)
mat2 Array (*)
mat3 v3d.Matrix3
mat3 Float32Array (*)
mat3 Array (*)
mat4 v3d.Matrix4
mat4 Float32Array (*)
mat4 Array (*)
ivec2, bvec2 Float32Array (*)
ivec2, bvec2 Array (*)
ivec3, bvec3 Int32Array (*)
ivec3, bvec3 Array (*)
ivec4, bvec4 Int32Array (*)
ivec4, bvec4 Array (*)
sampler2D v3d.Texture
samplerCube v3d.CubeTexture

(*) То же самое для внутреннего(innermost) массива размерности (dimension) того же типа GLSL, содержащего компоненты всех векторов или матриц в массиве.

Структурированные Униформы

Иногда вы хотите организовать униформы как структуры в коде шейдера. Чтобы Verge3D мог обрабатывать структурированные данные униформы, необходимо использовать следующий стиль.

uniforms = { data: { value: { position: new Vector3(), direction: new Vector3(0, 0, 1) } } }; Это определение может быть отображено следующим кодом GLSL: struct Data { vec3 position; vec3 direction; }; uniform Data data;

Структурированные Униформы с Массивами

Также можно управлять structs в массивах. Синтаксис для этого случая выглядит следующим образом:

const entry1 = { position: new Vector3(), direction: new Vector3(0, 0, 1) }; const entry2 = { position: new Vector3(1, 1, 1), direction: new Vector3(0, 1, 0) }; uniforms = { data: { value: [entry1, entry2] } }; Это определение может быть отображено на следующий код GLSL: struct Data { vec3 position; vec3 direction; }; uniform Data data[2];

Конструктор

Uniform(value : Object)

value — Объект, содержащий значение для настройки униформы. Его тип должен быть одним из типов униформы, описанных выше.

Свойства

.value : Object

Текущее значение униформы.

Методы

.clone() → Uniform

Возвращает клон данной униформы
Если свойство value униформы является Object с методом clone(), то используется этот метод, в противном случае значение копируется путем присваивания. Значения массива разделяются между клонированными Uniforms.

Исходный файл

О том как получить исходный код этого модуля читайте тут.