/
spivag
/
command_occ
Обзор
Документация
Войти
/
spivag
/
command_occ
Код
Запросы
1
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
initial
components/render/gl1_raw_cache.hxx
92 строки
4 KB
Spivakov
Initial
10 апр 2026, 13:45
10 апр 2026, 13:45
b2ad868
Код
Авторство
О чём код?
/// @file gl1_raw_cache.hxx /// @brief Структуры данных для кэширования геометрии в формате OpenGL 1.x. /// @copyright (c) Alexander Spivakov 2025. #ifndef __GL1_RAW_CACHE_HXX #define __GL1_RAW_CACHE_HXX #include <array> #include <optional> #include <vector> #include <string> #include <cmath> /// @brief Перечисление типов вычисляемых атрибутов для вершин. enum class AttributeType { None, ///< Атрибут не вычисляется GaussCurvature, ///< Гауссова кривизна // Будут добавлены: // MeanCurvature, ///< Средняя кривизна // MinCurvature, ///< Минимальная главная кривизна // MaxCurvature ///< Максимальная главная кривизна }; /// @brief Точка в 3D пространстве с нормалью для рендеринга. /// @details Используется для представления вершин геометрии в OpenGL. struct GLPoint { std::array< float, 3 > xyz{}; ///< Координаты точки (x, y, z). std::array< float, 3 > normal{}; ///< Вектор нормали в точке (nx, ny, nz). std::optional< float > attribute{}; ///< Опциональный скалярный атрибут (например, кривизна). }; /// @brief Полигональная линия (ломаная) для рендеринга рёбер. /// @details Представляет последовательность точек, соединённых линиями. struct GL1Polygon { std::vector< GLPoint > points{}; ///< Массив точек, формирующих ломаную линию. std::optional< std::array< float, 3 > > colour{}; ///< Опциональный цвет линии в формате RGB [0..1]. std::optional< float > lineWidth{}; ///< Опциональная толщина линии в пикселях. }; /// @brief Метаданные об атрибуте сетки. struct AttributeInfo { AttributeType type = AttributeType::None; ///< Тип атрибута. std::string name{}; ///< Название атрибута для отображения. float minValue = 0.0f; ///< Минимальное значение атрибута в сетке. float maxValue = 0.0f; ///< Максимальное значение атрибута в сетке. bool isValid = false; ///< Флаг валидности диапазона значений. /// @brief Обновить диапазон значений атрибута. void Update( float value ) { // Игнорируем невалидные значения (NaN, Inf) if ( !std::isfinite( value ) ) return; if ( !isValid ) { minValue = maxValue = value; isValid = true; } else { if ( value < minValue ) minValue = value; if ( value > maxValue ) maxValue = value; } } }; /// @brief Сетка треугольников для рендеринга граней. /// @details Представляет набор треугольников, формирующих поверхность. struct GL1Grid { std::vector< std::array< GLPoint, 3 > > triangles{}; ///< Массив треугольников (каждый треугольник состоит из 3 точек). std::vector< GL1Polygon > gridIsolines{}; ///< Массив полигональных линий (изолинии граней модели). std::optional< std::array< float, 3 > > colour{}; ///< Опциональный цвет грани в формате RGB [0..1]. AttributeInfo attributeInfo{}; ///< Метаданные об атрибутах вершин. }; /// @brief Кэш геометрических данных для отображения в OpenGL. /// @details Содержит все данные, необходимые для рендеринга модели: /// грани (треугольные сетки) и рёбра (полигональные линии). struct GL1RawCache { std::vector< GL1Grid > grids{}; ///< Массив треугольных сеток (грани модели). std::vector< GL1Polygon > polygons{}; ///< Массив полигональных линий (рёбра модели). }; #endif // __GL1_RAW_CACHE_HXX