Aller au contenu principal

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 transformation reçues en uniform
uniform mat4 uMVPMatrix;
uniform mat4 uMVMatrix;
uniform mat4 uNormalMatrix;

// Sorties du shader
out vec3 vPosition_vs; // Position du sommet transformée dans l'espace View (vs)
out vec3 vNormal_vs; // Normale du sommet transformée dans l'espace View (vs)
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;
}