35 lines
1.3 KiB
Plaintext
35 lines
1.3 KiB
Plaintext
// Вершинный шейдер (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;
|
||
} |