6 layout(location= 0) in
vec3 position;
7 layout(location= 2) in
vec3 normal;
8 layout(location= 4) in uint material;
10 uniform mat4 mvpMatrix;
11 uniform mat4 mvMatrix;
13 out
vec3 vertex_position;
14 out
vec3 vertex_normal;
15 flat out uint vertex_material;
20 gl_Position= mvpMatrix *
vec4(position, 1);
23 vertex_position=
vec3(mvMatrix *
vec4(position, 1));
24 vertex_normal= mat3(mvMatrix) * normal;
28 vertex_material= material;
34 #ifdef FRAGMENT_SHADER
35 out
vec4 fragment_color;
37 in
vec3 vertex_position;
38 in
vec3 vertex_normal;
39 flat in uint vertex_material;
41 #define MAX_MATERIALS 16
42 uniform
vec4 materials[MAX_MATERIALS];
48 float cos_theta=
max(0,
dot(n, l));
51 vec4 color= materials[vertex_material];
52 fragment_color= color * cos_theta;
Point max(const Point &a, const Point &b)
renvoie la plus grande composante de chaque point. x, y, z= max(a.x, b.x), max(a.y,...
float dot(const Vector &u, const Vector &v)
renvoie le produit scalaire de 2 vecteurs.
Vector normalize(const Vector &v)
renvoie un vecteur unitaire / longueur == 1.
vecteur generique, utilitaire.
vecteur generique 4d, ou 3d homogene, utilitaire.