space-game001/resources/shaders/planet_bake.vertex
Vladislav Khorev d1cab1f3b3 refactoring
2026-01-09 22:33:46 +03:00

31 lines
1.4 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// Vertex Shader (Bake Stage)
attribute vec3 vPosition;
attribute vec2 vTexCoord;
varying vec2 TexCoord;
varying float vHeight;
// Данные о плоскости треугольника планеты
uniform vec3 uPlanePoint; // Любая вершина треугольника (например, tri.data[0])
uniform vec3 uPlaneNormal; // Нормаль треугольника планеты (ось Z из GetRotationForTriangle)
uniform float uMaxHeight; // Максимальный размер камня (BASE_SCALE)
uniform mat4 ProjectionModelViewMatrix;
void main()
{
// 1. Вычисляем вектор от плоскости до текущей вершины камня
vec3 vecToVertex = vPosition - uPlanePoint;
// 2. Проецируем этот вектор на нормаль плоскости (скалярное произведение)
// Это и есть кратчайшее расстояние от точки до плоскости
float distance = dot(vecToVertex, uPlaneNormal);
// 3. Нормализуем высоту для записи в текстуру (0.0 - уровень земли, 1.0 - пик)
// Clamp гарантирует, что значения не выйдут за пределы, если камень "утоплен"
vHeight = clamp(distance / uMaxHeight, 0.0, 1.0);
TexCoord = vTexCoord;
gl_Position = ProjectionModelViewMatrix * vec4(vPosition, 1.0);
}