40 lines
1.0 KiB
Plaintext
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;
|
|
} |