/
Zamar_Terrier
/
TigorEngine
Обзор
Документация
Войти
/
Zamar_Terrier
/
TigorEngine
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
includes/Tools/intersections3D.h
180 строк
14 KB
Zamar_Terrier
Офигенное обновление движка
31 июл 2026, 21:03
Верифицирован
31 июл 2026, 21:03
1682686
Код
Авторство
О чём код?
/** * @file intersections3D.h * @brief Обнаружение столкновений и тесты пересечений в 3D пространстве * @details Предоставляет функции для обнаружения пересечений между различными 3D формами, включая сферы, плоскости, треугольники, капсулы и осево-выровненные ограничивающие блоки (AABB). */ #ifndef INTERSECTIONS3D_H #define INTERSECTIONS3D_H #include "Variabels/engine_includes.h" #include "Variabels/std_intersect.h" #ifdef __cplusplus extern "C" { #endif /** * @brief Тестирует пересечение сферы и плоскости * @param plane Указатель на структуру плоскости (специфичную для реализации) * @param sphere Указатель на структуру сферы (специфичную для реализации) * @param distance Указатель для сохранения расстояния от центра сферы до плоскости * @param depth Указатель для сохранения глубины проникновения (отрицательное значение если нет столкновения) * @param dir Указатель для сохранения направления нормали столкновения * @return 1 если столкновение обнаружено, 0 в противном случае */ int IntersectionSpherePlane(void *plane, void *sphere, float *distance, float *depth, vec3 *dir); /** * @brief Тестирует пересечение сферы и террейна * @param terrain Указатель на структуру террейна (специфичную для реализации) * @param sphere Указатель на структуру сферы (специфичную для реализации) * @param distance Указатель для сохранения расстояния от сферы до террейна * @param depth Указатель для сохранения глубины проникновения (отрицательное значение если нет столкновения) * @param dir Указатель для сохранения направления нормали столкновения * @return 1 если столкновение обнаружено, 0 в противном случае */ int IntersectionSphereTerrain(void *terrain, void *sphere, float *distance, float *depth, vec3 *dir); /** * @brief Тестирует пересечение сферы и треугольника * @param sPos Центральная позиция сферы * @param r Радиус сферы * @param p0 Первая вершина треугольника * @param p1 Вторая вершина треугольника * @param p2 Третья вершина треугольника * @param resPos Указатель для сохранения ближайшей точки на треугольнике к центру сферы * @param dist Указатель для сохранения расстояния от центра сферы до ближайшей точки * @param depth Указатель для сохранения глубины проникновения (отрицательное значение если нет столкновения) * @param dir Указатель для сохранения направления нормали столкновения * @return 1 если столкновение обнаружено, 0 в противном случае */ int IntersectionSphereTriangle(vec3 sPos, float r, vec3 p0, vec3 p1, vec3 p2, vec3 *resPos, float *dist, float *depth, vec3 *dir); /** * @brief Тестирует пересечение капсулы и общей формы * @param obj1 Указатель на структуру капсулы (специфичную для реализации) * @param shape Указатель на структуру общей формы * @param dist Указатель для сохранения расстояния между формами * @param depth Указатель для сохранения глубины проникновения (отрицательное значение если нет столкновения) * @param dir Указатель для сохранения направления нормали столкновения * @return 1 если столкновение обнаружено, 0 в противном случае */ int IntersectionCapsuleShape(void *obj1, void *shape, float *dist, float *depth, vec3 *dir); /** * @brief Тестирует пересечение сферы и общей формы * @param obj1 Указатель на структуру сферы (специфичную для реализации) * @param shape Указатель на структуру общей формы * @param dist Указатель для сохранения расстояния между формами * @param depth Указатель для сохранения глубины проникновения (отрицательное значение если нет столкновения) * @param dir Указатель для сохранения направления нормали столкновения * @return 1 если столкновение обнаружено, 0 в противном случае */ int IntersectionSphereShape(void *obj1, void *shape, float *dist, float *depth, vec3 *dir); /** * @brief Тестирует пересечение двух сфер (простая версия) * @param obj1 Указатель на первую структуру сферы (специфичную для реализации) * @param obj2 Указатель на вторую структуру сферы (специфичную для реализации) * @return 1 если столкновение обнаружено, 0 в противном случае * @details Возвращает простой булев результат без детальной информации о столкновении */ int IntersectionSphereToSphereL(void *obj1, void *obj2); /** * @brief Тестирует пересечение двух сфер (подробная версия) * @param obj1 Указатель на первую структуру сферы (специфичную для реализации) * @param obj2 Указатель на вторую структуру сферы (специфичную для реализации) * @param dist Указатель для сохранения расстояния между центрами сфер * @param depth Указатель для сохранения глубины проникновения (отрицательное значение если нет столкновения) * @param dir Указатель для сохранения направления нормали столкновения * @return 1 если столкновение обнаружено, 0 в противном случае */ int IntersectionSphereToSphere(void *obj1, void *obj2, float *dist, float *depth, vec3 *dir); /** * @brief Тестирует пересечение сферы и капсулы * @param obj1 Указатель на структуру сферы (специфичную для реализации) * @param obj2 Указатель на структуру капсулы (специфичную для реализации) * @param dist Указатель для сохранения расстояния между формами * @param depth Указатель для сохранения глубины проникновения (отрицательное значение если нет столкновения) * @param dir Указатель для сохранения направления нормали столкновения * @return 1 если столкновение обнаружено, 0 в противном случае */ int IntersectionSphereCapsule(void *obj1, void *obj2, float *dist, float *depth, vec3 *dir); /** * @brief Тестирует пересечение двух капсул * @param obj1 Указатель на первую структуру капсулы (специфичную для реализации) * @param obj2 Указатель на вторую структуру капсулы (специфичную для реализации) * @param dist Указатель для сохранения расстояния между формами * @param depth Указатель для сохранения глубины проникновения (отрицательное значение если нет столкновения) * @param dir Указатель для сохранения направления нормали столкновения * @return 1 если столкновение обнаружено, 0 в противном случае */ int IntersectionCapsuleCapsule(void *obj1, void *obj2, float *dist, float *depth, vec3 *dir); /** * @brief Тестирует пересечение сферы и осево-выровненного ограничивающего блока (AABB) * @param obj1 Указатель на структуру сферы (специфичную для реализации) * @param obj2 Указатель на структуру AABB (специфичную для реализации) * @param dist Указатель для сохранения расстояния между формами * @param depth Указатель для сохранения глубины проникновения (отрицательное значение если нет столкновения) * @param dir Указатель для сохранения направления нормали столкновения * @return 1 если столкновение обнаружено, 0 в противном случае */ int IntersectionSphereAABB(void *obj1, void *obj2, float *dist, float *depth, vec3 *dir); /** * @brief Тестирует пересечение осево-выровненного ограничивающего блока (AABB) и плоскости * @param obj1 Указатель на структуру AABB (специфичную для реализации) * @param obj2 Указатель на структуру плоскости (специфичную для реализаци��) * @param dist Указатель для сохранения расстояния между формами * @param depth Указатель для сохранения глубины проникновения (отрицательное значение если нет столкновения) * @param dir Указатель для сохранения направления нормали столкновения * @return 1 если столкновение обнаружено, 0 в противном случае */ int IntersectionAABBPlane(void *obj1, void *obj2, float *dist, float *depth, vec3 *dir); /** * @brief Тестирует пересечение двух осево-выровненных ограничивающих блоков (AABB) * @param obj1 Указатель на первую структуру AABB (специфичную для реализации) * @param obj2 Указатель на вторую структуру AABB (специфичную для реализации) * @param dist Указатель для сохранения расстояния между блоками * @param depth Указатель для сохранения глубины проникновения (отрицательное значение если нет столкновения) * @param dir Указатель для сохранения направления нормали столкновения * @return 1 если столкновение обнаружено, 0 в противном случае */ int IntersectionAABBAABB(void *obj1, void *obj2, float *dist, float *depth, vec3 *dir); /** * @brief Тестирует пересечение осево-выровненного ограничивающего блока (AABB) и капсулы * @param obj1 Указатель на структуру AABB (специфичную для реализации) * @param obj2 Указатель на структуру капсулы (специфичную для реализации) * @param dist Указатель для сохранения расстояния между формами * @param depth Указатель для сохранения глубины проникновения (отрицательное значение если нет столкновения) * @param dir Указатель для сохранения направления нормали столкновения * @return 1 если столкновение обнаружено, 0 в противном случае */ int IntersectionAABBCapsule(void *obj1, void *obj2, float *dist, float *depth, vec3 *dir); /** * @brief Тестирует пересечение треугольника и осево-выровненного ограничивающего блока (AABB) * @param v0 Первая вершина треугольника * @param v1 Вторая вершина треугольника * @param v2 Третья вершина треугольника * @param obj Указатель на структуру AABB (специфичную для реализации) * @param dist Указатель для сохранения расстояния между формами * @param depth Указатель для сохранения глубины проникновения (отрицательное значение если нет столкновения) * @param dir Указатель для сохранения направления нормали столкновения * @return 1 если столкновение обнаружено, 0 в противном случае */ int IntersectionTriangleAABB(vec3 v0, vec3 v1, vec3 v2, void *obj, float *dist, float *depth, vec3 *dir); #ifdef __cplusplus } #endif #endif // INTERSECTIONS3D_H