space-game001/shaders/planet_land.vertex
2026-01-04 18:11:10 +03:00

40 lines
1.0 KiB
Plaintext

attribute vec3 vPosition;
attribute vec2 vTexCoord;
attribute vec3 vNormal;
attribute vec3 vTangent; // Новые атрибуты
attribute vec3 vBinormal;
attribute vec3 vColor;
varying vec3 Color;
varying vec2 TexCoord;
varying vec3 vViewDirTangent;
varying vec3 worldPosition;
varying vec3 vWorldNormal;
uniform mat4 ProjectionModelViewMatrix;
uniform mat4 ModelViewMatrix;
uniform vec3 uViewPos;
void main() {
gl_Position = ProjectionModelViewMatrix * vec4(vPosition, 1.0);
TexCoord = vTexCoord;
vec3 viewDirWorld = normalize(uViewPos - vPosition);
// Строим матрицу перехода из атрибутов
// Так как базис ортонормирован, TBN^-1 == TBN_transpose
vViewDirTangent = vec3(
dot(viewDirWorld, vTangent),
dot(viewDirWorld, vBinormal),
dot(viewDirWorld, vNormal)
);
vec4 viewPosition = ModelViewMatrix * vec4(vPosition.xyz, 1.0);
worldPosition = vPosition;
vWorldNormal = vPosition;
Color = vColor;
}