mirror of
https://github.com/orange-cpp/omath.git
synced 2026-02-14 07:23:26 +00:00
Compare commits
4 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 96e4e1c9d6 | |||
| 872dbe146f | |||
| e0dcb65e3f | |||
| d0c532df39 |
@@ -4,8 +4,6 @@ project(omath VERSION 1.0.1)
|
|||||||
|
|
||||||
include(CMakePackageConfigHelpers)
|
include(CMakePackageConfigHelpers)
|
||||||
|
|
||||||
set(CMAKE_CXX_STANDARD 26)
|
|
||||||
|
|
||||||
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/out/${CMAKE_BUILD_TYPE}")
|
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/out/${CMAKE_BUILD_TYPE}")
|
||||||
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/out/${CMAKE_BUILD_TYPE}")
|
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/out/${CMAKE_BUILD_TYPE}")
|
||||||
|
|
||||||
@@ -13,6 +11,7 @@ option(OMATH_BUILD_TESTS "Build unit tests" ON)
|
|||||||
option(OMATH_THREAT_WARNING_AS_ERROR "Set highest level of warnings and force compiler to treat them as errors" ON)
|
option(OMATH_THREAT_WARNING_AS_ERROR "Set highest level of warnings and force compiler to treat them as errors" ON)
|
||||||
option(OMATH_BUILD_AS_SHARED_LIBRARY "Build Omath as .so or .dll" OFF)
|
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()
|
||||||
@@ -22,6 +21,11 @@ else()
|
|||||||
include/omath/engines/OpenGL/Camera.hpp)
|
include/omath/engines/OpenGL/Camera.hpp)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
set_target_properties(omath PROPERTIES
|
||||||
|
CXX_STANDARD 23
|
||||||
|
CXX_STANDARD_REQUIRED ON)
|
||||||
|
target_compile_features(omath PUBLIC cxx_std_23)
|
||||||
|
|
||||||
target_compile_definitions(omath PUBLIC OMATH_EXPORT)
|
target_compile_definitions(omath PUBLIC OMATH_EXPORT)
|
||||||
|
|
||||||
add_subdirectory(source)
|
add_subdirectory(source)
|
||||||
|
|||||||
@@ -22,6 +22,13 @@ namespace omath
|
|||||||
COLUMN_MAJOR
|
COLUMN_MAJOR
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
template<typename M1, typename M2>
|
||||||
|
concept MatTemplateEqual =
|
||||||
|
(M1::rows == M2::rows) && (M1::columns == M2::columns) &&
|
||||||
|
std::is_same_v<typename M1::value_type, typename M2::value_type> &&
|
||||||
|
(M1::store_type == M2::store_type);
|
||||||
|
|
||||||
template<size_t Rows = 0, size_t Columns = 0, class Type = float, MatStoreType StoreType = MatStoreType::ROW_MAJOR>
|
template<size_t Rows = 0, size_t Columns = 0, class Type = float, MatStoreType StoreType = MatStoreType::ROW_MAJOR>
|
||||||
requires std::is_arithmetic_v<Type>
|
requires std::is_arithmetic_v<Type>
|
||||||
class Mat final
|
class Mat final
|
||||||
|
|||||||
@@ -9,6 +9,7 @@
|
|||||||
#include "omath/Vector2.hpp"
|
#include "omath/Vector2.hpp"
|
||||||
#include "omath/Angle.hpp"
|
#include "omath/Angle.hpp"
|
||||||
#include <expected>
|
#include <expected>
|
||||||
|
#include <immintrin.h>
|
||||||
|
|
||||||
|
|
||||||
namespace omath
|
namespace omath
|
||||||
@@ -228,6 +229,14 @@ namespace omath
|
|||||||
return Angle<float, 0.f, 180.f, AngleFlags::Clamped>::FromRadians(std::acos(Dot(other) / bottom));
|
return Angle<float, 0.f, 180.f, AngleFlags::Clamped>::FromRadians(std::acos(Dot(other) / bottom));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[[nodiscard]] bool IsPerpendicular(const Vector3& other) const
|
||||||
|
{
|
||||||
|
if (const auto angle = AngleBetween(other))
|
||||||
|
return angle->AsDegrees() == 90.f;
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
[[nodiscard]] constexpr float Sum2D() const
|
[[nodiscard]] constexpr float Sum2D() const
|
||||||
{
|
{
|
||||||
return Vector2::Sum();
|
return Vector2::Sum();
|
||||||
@@ -235,7 +244,7 @@ namespace omath
|
|||||||
|
|
||||||
[[nodiscard]] Vector3 ViewAngleTo(const Vector3& other) const;
|
[[nodiscard]] Vector3 ViewAngleTo(const Vector3& other) const;
|
||||||
|
|
||||||
[[nodiscard]] std::tuple<float, float, float> AsTuple() const
|
[[nodiscard]] constexpr std::tuple<float, float, float> AsTuple() const
|
||||||
{
|
{
|
||||||
return std::make_tuple(x, y, z);
|
return std::make_tuple(x, y, z);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ namespace omath::projection
|
|||||||
return m_width / m_height;
|
return m_width / m_height;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
using FieldOfView = const Angle<float, 0.f, 180.f, AngleFlags::Clamped>;
|
using FieldOfView = Angle<float, 0.f, 180.f, AngleFlags::Clamped>;
|
||||||
|
|
||||||
template<class Mat4x4Type, class ViewAnglesType>
|
template<class Mat4x4Type, class ViewAnglesType>
|
||||||
class Camera
|
class Camera
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ namespace omath::opengl
|
|||||||
{
|
{
|
||||||
|
|
||||||
Camera::Camera(const Vector3& position, const ViewAngles& viewAngles, const projection::ViewPort& viewPort,
|
Camera::Camera(const Vector3& position, const ViewAngles& viewAngles, const projection::ViewPort& viewPort,
|
||||||
const Angle<float, 0, 180, AngleFlags::Clamped>& fov, const float near, const float far) :
|
const Angle<float, 0.f, 180.f, AngleFlags::Clamped>& fov, const float near, const float far) :
|
||||||
projection::Camera<Mat4x4, ViewAngles>(position, viewAngles, viewPort, fov, near, far)
|
projection::Camera<Mat4x4, ViewAngles>(position, viewAngles, viewPort, fov, near, far)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -395,6 +395,12 @@ TEST_F(UnitTestVector3, AngleBeatween)
|
|||||||
EXPECT_FALSE(Vector3(0.0f, 0.0f, 0.0f).AngleBetween({0.0f, 0.0f, 1.0f}).has_value());
|
EXPECT_FALSE(Vector3(0.0f, 0.0f, 0.0f).AngleBetween({0.0f, 0.0f, 1.0f}).has_value());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST_F(UnitTestVector3, IsPerpendicular)
|
||||||
|
{
|
||||||
|
EXPECT_EQ(Vector3(0.0f, 0.0f, 1.0f).IsPerpendicular({1, 0 ,0}), true);
|
||||||
|
EXPECT_EQ(Vector3(0.0f, 0.0f, 1.0f).IsPerpendicular({0.0f, 0.0f, 1.0f}), false);
|
||||||
|
EXPECT_FALSE(Vector3(0.0f, 0.0f, 0.0f).IsPerpendicular({0.0f, 0.0f, 1.0f}));
|
||||||
|
}
|
||||||
|
|
||||||
// Static assertions (compile-time checks)
|
// Static assertions (compile-time checks)
|
||||||
static_assert(Vector3(1.0f, 2.0f, 3.0f).LengthSqr() == 14.0f, "LengthSqr should be 14");
|
static_assert(Vector3(1.0f, 2.0f, 3.0f).LengthSqr() == 14.0f, "LengthSqr should be 14");
|
||||||
|
|||||||
Reference in New Issue
Block a user