В шейдерах Three.js, написанных на языке GLSL (OpenGL Shading Language), все операции строятся вокруг строго типизированных данных. Понимание базовых типов — float, vec2, vec3, vec4 и mat4 — является фундаментом для создания визуальных эффектов, трансформаций и работы с геометрией.
Тип float представляет собой скалярное число с плавающей запятой. Он используется для хранения величин, таких как координаты, интенсивность освещения, коэффициенты прозрачности или времени анимации.
Пример объявления и использования:
uniform float uTime;
float intensity = 0.5 * sin(uTime);
Ключевые особенности:
1.0, 0.5), иначе компилятор GLSL может
интерпретировать значение как int.vec2 — вектор из двух компонентов x и
y. Применяется для работы с координатами текстур,
2D-позициями или двумерными направлениями.
Пример:
uniform vec2 uResolution;
vec2 uv = gl_FragCoord.xy / uResolution;
Особенности:
.x и .y или
.r и .g для цветовых данных.length(uv) или normalize(uv).vec3 — трёхкомпонентный вектор x,
y, z. Основной тип для работы с
3D-координатами, нормалями и цветами в формате RGB.
Пример:
vec3 normal = normalize(vNormal);
vec3 lightDir = normalize(vec3(1.0, 1.0, 1.0));
float diff = max(dot(normal, lightDir), 0.0);
vec3 color = diff * vec3(1.0, 0.5, 0.0);
Особенности:
.x, .y,
.z или .r, .g,
.b.dot,
cross, reflect для расчета физических
эффектов.vec4 расширяет vec3 на четвертую компоненту
w. Используется для RGBA-цветов, кватернионных
представлений или координат в гомогенных системах.
Пример:
vec4 color = vec4(1.0, 0.5, 0.0, 0.8); // оранжевый с прозрачностью 0.8
gl_FragColor = color;
Особенности:
.x, .y, .z,
.w или .r, .g, .b,
.a.mat4 — матрица 4x4, основной инструмент для трансформаций в 3D-пространстве: перемещения, масштабирования, вращения и проекции.
Пример использования:
uniform mat4 modelMatrix;
uniform mat4 viewMatrix;
uniform mat4 projectionMatrix;
vec4 worldPosition = modelMatrix * vec4(position, 1.0);
vec4 clipPosition = projectionMatrix * viewMatrix * worldPosition;
gl_Position = clipPosition;
Особенности:
mat4 * vec4).modelMatrix,
viewMatrix, projectionMatrix позволяют
управлять геометрией без ручного вычисления трансформаций.vec3(1.0, 0.0, 0.0)), что предотвращает неопределённое
поведение шейдера.vec3 + float добавляет скаляр ко всем компонентам
вектора.Эти типы данных формируют основу для работы с GLSL в Three.js. Правильное понимание их структуры и возможностей позволяет создавать сложные шейдеры, эффективно управлять геометрией и цветом, а также оптимизировать вычисления для рендеринга в реальном времени.