glsl_01

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
//Указывается точность вычислений(плавающей точки)
precision highp float;
//Переменная содержит значение времени, в момент запуска шейдера
uniform float time;
//Разрешение экрана
uniform vec2 resolution;
//Позиция пикселя в пространстве
varying vec3 fPosition;
//Вектор нормали к текущему пикселю
varying vec3 fNormal;
void main()
{
/* Встроенные в glsl типы данных */
/* Векторы (поддерживается сложение и умножение) */
/* vec2, vec3, vec4 - 2х, 3х и 4х мерные: */
vec2 myVec2 = vec2(0.0, 0.1);
vec3 myVec3 = vec3(0.1, 0.2, 0.3);
vec4 myVec4 = vec4(0.1, 0.2, 0.3, 0.4);
//Примеры работы с векторами:
vec2 x2 = vec2(0.1, 0.2) + vec2(0.1, 0.9);
x2 = myVec2;
vec3 x3 = vec3(vec2(0.5, 0.6), 0.1);
//Эти объявления дают один и тот же вектор
vec4 x4 = vec4(0.1, vec3(0.2, 0.3, 0.4));
vec4 x4_ = vec4(vec2(0.1, 0.2), vec2(0.3, 0.4));
vec4 _x4_= vec4(0.1, 0.2, 0.3, 0.4);
//Аналогично есть встроенные матрицы (2х2, 3х3, 4х4)
mat2 m2x2 = mat2(vec2(0.1, 0.2), vec2(0.3, 0.4));
//даст матрицу:
// | 0.1 0.2 |
// | 0.3 0.4 |
mat3 m3x3 = mat3(42.0); //даст матрицу, где все эл-ты = 42.0
// Подробнее см. http://en.wikibooks.org/wiki/GLSL_Programming/Vector_and_Matrix_Operations
gl_FragColor = vec4(fNormal, 1.0);
}