33 lines
1.5 KiB
Plaintext
33 lines
1.5 KiB
Plaintext
varying vec2 TexCoord;
|
|
varying vec3 vViewDirTangent;
|
|
|
|
uniform sampler2D Texture; // Нам нужен только Alpha канал (высота)
|
|
uniform float uHeightScale;
|
|
|
|
void main() {
|
|
vec3 viewDir = normalize(vViewDirTangent);
|
|
float height = texture2D(Texture, TexCoord).a;
|
|
|
|
// Рассчитываем вектор смещения P
|
|
//vec2 p = viewDir.xy * (height * uHeightScale) / viewDir.z;
|
|
//vec2 p = vec2(viewDir.y, -viewDir.x) * (height * uHeightScale);
|
|
//vec2 p = viewDir.xy * (height * uHeightScale);
|
|
vec2 p = vec2(viewDir.x, -viewDir.y) * (height * uHeightScale);
|
|
vec2 finalTexCoord = TexCoord + p;
|
|
|
|
// 1. Визуализация сетки по смещенным координатам
|
|
// Если сетка кривая или ломается на стыках — значит T, B, N векторы не сошлись
|
|
vec2 grid = fract(finalTexCoord * 20.0); // 20 ячеек сетки
|
|
float line = (step(0.9, grid.x) + step(0.9, grid.y));
|
|
|
|
// 2. Визуализация вектора смещения через цвет
|
|
// Красный = смещение по U, Зеленый = смещение по V
|
|
vec3 offsetColor = vec3(p * 10.0 + 0.5, 0.0); // Умножаем на 10 для видимости
|
|
|
|
vec3 finalColor = mix(offsetColor, vec3(1.0), line); // Накладываем сетку поверх цвета
|
|
|
|
// 3. Подмешиваем карту высот, чтобы видеть "объемы"
|
|
gl_FragColor = vec4(finalColor * height, 1.0);
|
|
}
|
|
|