// Вершинный шейдер (Vertex Shader) attribute vec3 vPosition; attribute vec3 vColor; attribute vec3 vNormal; attribute vec2 vTexCoord; varying vec3 color; varying vec3 normal; varying vec2 TexCoord; varying float viewZ; // <--- НОВОЕ: Z-координата в пространстве вида (View Space) varying vec3 pos; uniform mat4 ProjectionModelViewMatrix; uniform mat4 ModelViewMatrix; // Нужна для преобразования vPosition в View Space uniform vec3 uLightDirection; void main() { // Преобразование позиции в пространство вида (View Space) vec4 viewPosition = ModelViewMatrix * vec4(vPosition.xyz, 1.0); // Сохраняем отрицательную Z-координату. В OpenGL Z-координата (глубина) // в пространстве вида обычно отрицательна, но для расчета тумана // удобнее использовать положительное значение. viewZ = -viewPosition.z; pos = vPosition.xyz; gl_Position = ProjectionModelViewMatrix * vec4(vPosition.xyz, 1.0); normal = normalize((ModelViewMatrix * vec4(vNormal, 0.0)).xyz); color = vColor; TexCoord = vTexCoord; }