// Вершинный шейдер:
attribute vec3 vPosition;
attribute vec3 vNormal; 

uniform mat4 ProjectionModelViewMatrix;
uniform mat4 ModelViewMatrix;

varying vec3 vWorldNormal; 
varying vec3 vViewNormal;
varying vec3 vViewPosition;

void main() {
    vWorldNormal = vPosition; // Локальная позиция вершины на сфере радиуса 1.0
    vViewPosition = (ModelViewMatrix * vec4(vPosition, 1.0)).xyz;
    vViewNormal = normalize((ModelViewMatrix * vec4(vNormal, 0.0)).xyz);
    gl_Position = ProjectionModelViewMatrix * vec4(vPosition, 1.0);
}