5 uniform mat4 mvpMatrix;
9 out
vec3 vertex_position;
13 gl_Position= mvpMatrix *
vec4(position, 1);
14 vertex_position= position;
19 #ifdef FRAGMENT_SHADER
27 layout(std430, binding= 0) buffer fragments
37 layout(binding= 0, r32ui) coherent uniform uimage2D counters;
39 in
vec3 vertex_position;
40 out
vec4 fragment_color;
42 layout(early_fragment_tests) in;
49 vec3 color= (normal + 1) / 2;
50 float g= 0.3*color.r + 0.7*color.g + 0.1*color.b;
52 uint n= imageAtomicAdd(counters, ivec2(gl_FragCoord.xy), 1) +1;
67 if(n < 10) color= g * colors[n] /
vec3(255);
68 else color= g * colors[9] /
vec3(255);
74 uint offset= atomicAdd(count, 1);
76 array[offset].x= vertex_position.x;
77 array[offset].y= vertex_position.y;
78 array[offset].z= vertex_position.z;
79 array[offset].r= color.r;
80 array[offset].g= color.g;
81 array[offset].b= color.b;
Vector normalize(const Vector &v)
renvoie un vecteur unitaire / longueur == 1.
Vector cross(const Vector &u, const Vector &v)
renvoie le produit vectoriel de 2 vecteurs.
vecteur generique, utilitaire.
vecteur generique 4d, ou 3d homogene, utilitaire.