// 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);
}