C'est une librairie pour faire du rendu 3D sur une carte graphique
Les développeurs d'OpenGL ont développé la possibilité d'amplifier ces possibilités avec ce qu'on appelle un “Shader” car ils étaient surtout utilisés pour faire des ombres
En OpenGL 3, il n'y aura plus de pipeline par défaut, que des shaders
Glsl est un langage opengl “élégant” et couramment utilisé On compile le shader sur la carte graphique
Un shader est composé de :
les types :
les points
La scène 3D dans laquelle on va pouvoir afficher des contenus : le frustrum
En utilisant l'objet [ortho], la projection est parallèle en tout point ce qui fait que la forme géométrique n'apparait pas déformée en changeant le point de vu
fragment carré : coin en bas à gauche à 0,0 en x,y coin en haut à droite à 1,1
Vertices
matrice modelview * matrice de projection = ce que l'on obtient à l'écran
une fois qu'on a fait la projection, rasterisation, on passe dans les fragments
Gem>exemples>glsl>01.texture.pd
le fichier texture.vert :
// Cyrille Henry 2007 void main() { gl_TexCoord[0] = gl_MultiTexCoord0; gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; }
pour chacun des sommets, c'est exécute, ça donne la position du sommet (qui ici ne change pas) et la position de la texture pour ce sommet (qui ne change pas non plus)
le main est ainsi appelé 4 fois
le fichier texture.frag :
// Cyrille Henry 2007 //#extension GL_ARB_texture_rectangle : enable //uniform sampler2DRect MyTex; uniform sampler2D MyTex; uniform float B,C; void main (void) { // vec4 color = texture2DRect(MyTex, gl_TexCoord[0].st); vec4 color = texture2D(MyTex, gl_TexCoord[0].st); color *= B+1.; // brightness vec4 gray = vec4(dot(color.rgb,vec3(0.2125, 0.7154, 0.0721))); color = mix(gray, color, C+1.); // contrast gl_FragColor = color; }
Il y a des textures carrés (puissance de 2 obligatoires) et les textures rectangles (ajoutées récemment)
//#extension GL_ARB_texture_rectangle : enable ARB : extension acceptée par le bureau de révision OpenGl
3 variables uniform (on peut les changer à partir du programme hote) : MyTex, B et C
uniform sampler2D MyTex; par défaut, MyTex est la variable de texture, ici elle est carrée
vec4 color = texture2D(MyTex, gl_TexCoord[0].st);
on va lire la couleur de la texture aux coordonnées du pixel dont on est en train de faire le rendu
gl_FragColor = color;
on va écrire la couleur désirée dans la variable gl_FragColor
vec4 gray = vec4(dot(color.rgb,vec3(0.2125, 0.7154, 0.0721)));
on veut calculer la luminance selon RGB, les valeurs indiqués sont toujours les mêmes quand il s'agit de calculer le niveau de gris à partir du RGB, on considère moins la valeur de rouge que le vert et bleu déclaration des variables à la volée, on peut aussi garder des valeurs de variables en les déclarant
color = mix(gray, color, C+1.); // contrast
on additionne ensemble le gris et la couleur selon la valeur de contraste
Entre le vertex et le fragment il faut passer l'ID du vertex et du fragment au programme avec le message [link< pour que le [glsl-program] sache quoi compiler