attribute vec3 vPosition; attribute vec2 vTexCoord; attribute vec3 vNormal; attribute vec3 vTangent; // Новые атрибуты attribute vec3 vBinormal; varying vec2 TexCoord; varying vec3 vViewDirTangent; uniform mat4 ProjectionModelViewMatrix; 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) ); }