fixed trace line, improved collision

This commit is contained in:
2024-11-15 11:28:13 +03:00
parent 0ba787f6e0
commit a0b9d35edd
7 changed files with 65 additions and 5 deletions

View File

@@ -13,7 +13,10 @@ option(OMATH_BUILD_AS_SHARED_LIBRARY "Build Omath as .so or .dll" OFF)
if (OMATH_BUILD_AS_SHARED_LIBRARY)
add_library(omath SHARED source/Vector3.cpp)
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()
add_subdirectory(source)

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

View 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;
};
}

View File

@@ -2,7 +2,6 @@
// Created by Orange on 11/13/2024.
//
#pragma once
#include <optional>
#include "omath/Vector3.hpp"
#include "omath/Triangle3d.hpp"
@@ -34,6 +33,6 @@ namespace omath::collision
// Realization of MöllerTrumbore intersection algorithm
// https://en.wikipedia.org/wiki/M%C3%B6ller%E2%80%93Trumbore_intersection_algorithm
[[nodiscard]]
static std::optional<Vector3> GetRayHitPoint(const Ray& ray, const Triangle3d& triangle);
static Vector3 GetRayHitPoint(const Ray& ray, const Triangle3d& triangle);
};
}

View File

@@ -1 +1,4 @@
target_sources(omath PRIVATE LineTracer.cpp)
target_sources(omath PRIVATE
LineTracer.cpp
Cube.cpp
)

13
source/collision/Cube.cpp Normal file
View 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)
{
}
}

View File

@@ -20,7 +20,7 @@ namespace omath::collision
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();