#pragma once #include "ZLMath.h" #include "Renderer.h" #include "PlanetData.h" namespace ZL { struct StoneParams { static const float BASE_SCALE; // Общий размер камня static const float MIN_AXIS_SCALE; // Минимальное растяжение/сжатие по оси static const float MAX_AXIS_SCALE; // Максимальное растяжение/сжатие по оси static const float MIN_PERTURBATION; // Минимальное радиальное возмущение вершины static const float MAX_PERTURBATION; // Максимальное радиальное возмущение вершины static const int STONES_PER_TRIANGLE; }; struct StoneInstance { uint64_t seed; Vector3f position; Vector3f scale; Vector4f rotation; }; struct StoneGroup { // mesh.PositionData и прочие будут заполняться в inflate() VertexDataStruct mesh; // Внешний вектор — индекс треугольника планеты, // внутренний — список камней на этом треугольнике std::vector> allInstances; // Очищает старую геометрию и генерирует новую для указанных индексов void inflate(const std::vector& triangleIndices); }; // Теперь возвращает заготовку со всеми параметрами, но без тяжелого меша StoneGroup CreateStoneGroupData(uint64_t globalSeed, const LodLevel& planetLodLevel); } // namespace ZL