Un exemple de Vertex Shader pour la 3D
La plupart des calculs de transformation ont lieu dans le Vertex Shader puisque c'est lui qui calcule la variable gl_Position utilisée par OpenGL. Voici un exemple commenté de Vertex Shader simple et standard pour faire de la 3D:
#version 330 core
// Attributs de sommet
layout(location = 0) in vec3 aVertexPosition; // Position du sommet
layout(location = 1) in vec3 aVertexNormal; // Normale du sommet
layout(location = 2) in vec2 aVertexTexCoords; // Coordonnées de texture du sommet
// Matrices de transformations reçues en uniform
uniform mat4 uMVPMatrix;
uniform mat4 uMVMatrix;
uniform mat4 uNormalMatrix;
// Sorties du shader
out vec3 vPosition_vs; // Position du sommet transformé dans l'espace View
out vec3 vNormal_vs; // Normale du sommet transformé dans l'espace View
out vec2 vTexCoords; // Coordonnées de texture du sommet
void main() {
// Passage en coordonnées homogènes
vec4 vertexPosition = vec4(aVertexPosition, 1);
vec4 vertexNormal = vec4(aVertexNormal, 0);
// Calcul des valeurs de sortie
vPosition_vs = vec3(uMVMatrix * vertexPosition);
vNormal_vs = vec3(uNormalMatrix * vertexNormal);
vTexCoords = aVertexTexCoords;
// Calcul de la position projetée
gl_Position = uMVPMatrix * vertexPosition;
}