mirror of
https://github.com/orange-cpp/omath.git
synced 2026-02-13 23:13:26 +00:00
fixed trace line, improved collision
This commit is contained in:
@@ -13,7 +13,10 @@ option(OMATH_BUILD_AS_SHARED_LIBRARY "Build Omath as .so or .dll" OFF)
|
|||||||
if (OMATH_BUILD_AS_SHARED_LIBRARY)
|
if (OMATH_BUILD_AS_SHARED_LIBRARY)
|
||||||
add_library(omath SHARED source/Vector3.cpp)
|
add_library(omath SHARED source/Vector3.cpp)
|
||||||
else()
|
else()
|
||||||
add_library(omath STATIC source/Vector3.cpp)
|
add_library(omath STATIC source/Vector3.cpp
|
||||||
|
include/omath/collision/ICollidable.h
|
||||||
|
include/omath/collision/Cube.h
|
||||||
|
source/collision/Cube.cpp)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
add_subdirectory(source)
|
add_subdirectory(source)
|
||||||
|
|||||||
22
include/omath/collision/Cube.h
Normal file
22
include/omath/collision/Cube.h
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
//
|
||||||
|
// Created by vlad on 11/15/2024.
|
||||||
|
//
|
||||||
|
#pragma once
|
||||||
|
#include "ICollidable.h"
|
||||||
|
|
||||||
|
namespace omath::collision
|
||||||
|
{
|
||||||
|
class Cube final : public ICollidable
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
|
[[nodiscard]]
|
||||||
|
bool IsCollideWith(const std::shared_ptr<ICollidable>& other) override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
[[nodiscard]]
|
||||||
|
bool IsCollideWithCube(const Cube& other);
|
||||||
|
bool IsCollideWithCapsule(const Cube& other);
|
||||||
|
|
||||||
|
};
|
||||||
|
}
|
||||||
20
include/omath/collision/ICollidable.h
Normal file
20
include/omath/collision/ICollidable.h
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
//
|
||||||
|
// Created by vlad on 11/15/2024.
|
||||||
|
//
|
||||||
|
#pragma once
|
||||||
|
#include "ICollidable.h"
|
||||||
|
#include <memory>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
namespace omath::collision
|
||||||
|
{
|
||||||
|
class ICollidable
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
virtual ~ICollidable() = default;
|
||||||
|
|
||||||
|
[[nodiscard]]
|
||||||
|
virtual bool IsCollideWith(const std::shared_ptr<ICollidable>& other) = 0;
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -2,7 +2,6 @@
|
|||||||
// Created by Orange on 11/13/2024.
|
// Created by Orange on 11/13/2024.
|
||||||
//
|
//
|
||||||
#pragma once
|
#pragma once
|
||||||
#include <optional>
|
|
||||||
|
|
||||||
#include "omath/Vector3.hpp"
|
#include "omath/Vector3.hpp"
|
||||||
#include "omath/Triangle3d.hpp"
|
#include "omath/Triangle3d.hpp"
|
||||||
@@ -34,6 +33,6 @@ namespace omath::collision
|
|||||||
// Realization of Möller–Trumbore intersection algorithm
|
// Realization of Möller–Trumbore intersection algorithm
|
||||||
// https://en.wikipedia.org/wiki/M%C3%B6ller%E2%80%93Trumbore_intersection_algorithm
|
// https://en.wikipedia.org/wiki/M%C3%B6ller%E2%80%93Trumbore_intersection_algorithm
|
||||||
[[nodiscard]]
|
[[nodiscard]]
|
||||||
static std::optional<Vector3> GetRayHitPoint(const Ray& ray, const Triangle3d& triangle);
|
static Vector3 GetRayHitPoint(const Ray& ray, const Triangle3d& triangle);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1 +1,4 @@
|
|||||||
target_sources(omath PRIVATE LineTracer.cpp)
|
target_sources(omath PRIVATE
|
||||||
|
LineTracer.cpp
|
||||||
|
Cube.cpp
|
||||||
|
)
|
||||||
|
|||||||
13
source/collision/Cube.cpp
Normal file
13
source/collision/Cube.cpp
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
//
|
||||||
|
// Created by vlad on 11/15/2024.
|
||||||
|
//
|
||||||
|
#include "omath/collision/Cube.h"
|
||||||
|
|
||||||
|
|
||||||
|
namespace omath::collision
|
||||||
|
{
|
||||||
|
bool Cube::IsCollideWith(const std::shared_ptr<ICollidable>& other)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -20,7 +20,7 @@ namespace omath::collision
|
|||||||
return DirectionVector().Normalized();
|
return DirectionVector().Normalized();
|
||||||
}
|
}
|
||||||
|
|
||||||
std::optional<Vector3> LineTracer::GetRayHitPoint(const Ray &ray, const Triangle3d &triangle)
|
Vector3 LineTracer::GetRayHitPoint(const Ray &ray, const Triangle3d &triangle)
|
||||||
{
|
{
|
||||||
constexpr float kEpsilon = std::numeric_limits<float>::epsilon();
|
constexpr float kEpsilon = std::numeric_limits<float>::epsilon();
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user