// Вершинный шейдер (Vertex Shader) attribute vec3 vPosition; attribute vec2 vTexCoord; varying vec2 TexCoord; varying float viewZ; varying vec3 pos; varying vec3 worldPosition; uniform mat4 ProjectionModelViewMatrix; uniform mat4 ModelViewMatrix; 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); TexCoord = vTexCoord; worldPosition = vPosition; }