Compare commits

..

21 Commits

Author SHA1 Message Date
e8f40218dd Merge pull request #62 from orange-cpp/feaure/added_logo
Feaure/added logo
2025-09-01 17:04:50 +03:00
50054ca937 Acknowledges logo design contribution
Updates the credits to acknowledge the new initial logo design.
2025-09-01 17:04:29 +03:00
63220c0be7 Adds an omath.psd file.
Adds a binary file named omath.psd.
2025-09-01 17:03:31 +03:00
3b6d19782c Updates README with local image links
Updates the README to use local image links instead of Imgur links for the showcase section.

This improves the project's resilience against external link rot and
ensures the images remain accessible even if Imgur experiences issues.
2025-09-01 17:02:23 +03:00
2d58330508 Replaces banner with logo
Replaces the project banner in the README with a dedicated logo.

This change simplifies the banner implementation and improves maintainability
by using a local image file instead of referencing an external URL.
2025-09-01 16:56:43 +03:00
abf57a55ea Updates include paths and removes dependency
Updates the include paths in omath.hpp to be more explicit,
ensuring correct referencing of header files.

Removes unnecessary include of vector3.hpp from vector2.hpp.
2025-09-01 01:28:04 +03:00
463532ba81 Merge pull request #60 from orange-cpp/feature/moved_to_dear
Refactors: Moves linear algebra to new directory
2025-09-01 00:02:00 +03:00
d74c66990a Refactors: Moves linear algebra to new directory
Moves linear algebra headers to a new subdirectory to improve project structure.

Updates includes to reflect the directory change.
Adds vcpkg to the tracked repositories.
2025-08-31 23:36:05 +03:00
7f1bc51905 Updates project version to 3.5.0
Increments the project version number in CMakeLists.txt
from 3.4.0 to 3.5.0.
2025-08-29 22:04:12 +03:00
71127f1f12 Updates project version to 3.4.0
Bumps the project's version number from 3.3.0 to 3.4.0.

Adds a compile definition to expose the project version via the
`OMATH_VERSION` macro.
2025-08-29 22:03:35 +03:00
89041e20ae Merge pull request #59 from orange-cpp/feature/new_primitives
Adds plane primitive generation
2025-08-29 14:41:36 +03:00
a54dd4b52a Fixes plane triangle generation
Corrects the order of vertices when constructing triangles
for the plane primitive, addressing a potential winding order
issue that could lead to incorrect surface normals and rendering.
2025-08-29 00:11:31 +03:00
d7e497b617 Simplifies plane creation logic
Refactors the plane creation function to directly compute the triangle vertices, removing unnecessary intermediate variables. This results in more concise and readable code.
2025-08-28 23:57:22 +03:00
80938cd913 Adds plane primitive generation
Implements a function to generate a plane primitive from two vertices, a direction vector, and a size, returning an array of two triangles.
2025-08-28 23:18:36 +03:00
830505dbe5 Merge pull request #58 from orange-cpp/feature/ortho-proj
Adds left- and right-handed ortho matrices
2025-08-27 23:23:40 +03:00
75565ecf2d Adds left- and right-handed ortho matrices.
Adds functions to generate left- and right-handed orthographic projection matrices.
This provides more flexibility when defining a projection for rendering.
2025-08-27 23:17:56 +03:00
9a7a4c7fff Removed submodule extlibs/glm 2025-08-27 20:22:33 +03:00
c0f0bb3c2e com 2025-08-27 20:07:47 +03:00
a097c0a2f4 Merge pull request #57 from orange-cpp/feature/added_formatters
Adds std::format support for math types
2025-08-26 12:37:13 +03:00
20ae2b4dd1 Adds formatters for Angle and Color
Adds formatters for `omath::Angle` and `omath::Color` to allow for easy formatting using `std::format`.

This allows users to easily output Angle and Color values in a human-readable format.
2025-08-26 12:35:40 +03:00
115b5a3471 Adds std::format support for math types
Adds `std::formatter` specializations for `Mat`, `Vector2`, `Vector3`, and `Vector4` types, enabling the use of `std::format` for these types.

This simplifies formatting and printing of these mathematical objects, improving code readability and consistency.

Also adds a hash function specialization for Vector3.
2025-08-26 12:22:33 +03:00
43 changed files with 238 additions and 68 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 117 KiB

BIN
.github/images/logos/omath_logo_mega.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 454 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

BIN
.github/images/logos/omath_logo_nano.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

BIN
.github/images/showcase/apex.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 MiB

BIN
.github/images/showcase/cod_bo2.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 MiB

BIN
.github/images/showcase/cs2.jpeg vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 644 KiB

BIN
.github/psd/omath.psd vendored Normal file

Binary file not shown.

1
.idea/vcs.xml generated
View File

@@ -3,5 +3,6 @@
<component name="VcsDirectoryMappings">
<mapping directory="" vcs="Git" />
<mapping directory="$PROJECT_DIR$/extlibs/googletest" vcs="Git" />
<mapping directory="$PROJECT_DIR$/extlibs/vcpkg" vcs="Git" />
</component>
</project>

View File

@@ -1,6 +1,6 @@
cmake_minimum_required(VERSION 3.26)
project(omath VERSION 3.3.0 LANGUAGES CXX)
project(omath VERSION 3.5.0 LANGUAGES CXX)
include(CMakePackageConfigHelpers)
@@ -39,6 +39,8 @@ endif ()
add_library(${PROJECT_NAME}::${PROJECT_NAME} ALIAS ${PROJECT_NAME})
target_compile_definitions(${PROJECT_NAME} PUBLIC OMATH_VERSION="${PROJECT_VERSION}")
if (OMATH_IMGUI_INTEGRATION)
target_compile_definitions(${PROJECT_NAME} PUBLIC OMATH_IMGUI_INTEGRATION)

View File

@@ -2,7 +2,7 @@
Thanks to everyone who made this possible, including:
- Saikari aka luadebug for VCPKG port.
- Saikari aka luadebug for VCPKG port and awesome new initial logo design.
And a big hand to everyone else who has contributed over the past!

View File

@@ -1,6 +1,6 @@
<div align = center>
![banner](https://github.com/orange-cpp/omath/blob/main/.github/images/banner.png?raw=true)
![banner](.github/images/logos/omath_logo_macro.png)
![GitHub License](https://img.shields.io/github/license/orange-cpp/omath)
![GitHub contributors](https://img.shields.io/github/contributors/orange-cpp/omath)
@@ -83,11 +83,11 @@ for (auto ent: apex_sdk::EntityList::GetAllEntities())
With `omath/projection` module you can achieve simple ESP hack for powered by Source/Unreal/Unity engine games, like [Apex Legends](https://store.steampowered.com/app/1172470/Apex_Legends/).
![banner](https://i.imgur.com/lcJrfcZ.png)
![banner](.github/images/showcase/apex.png)
Or for InfinityWard Engine based games. Like Call of Duty Black Ops 2!
![banner](https://i.imgur.com/F8dmdoo.png)
![banner](.github/images/showcase/cod_bo2.png)
Or create simple trigger bot with embeded traceline from omath::collision::LineTrace
![banner](https://i.imgur.com/fxMjRKo.jpeg)
![banner](.github/images/showcase/cs2.jpeg)
Or even advanced projectile aimbot
[Watch Video](https://youtu.be/lM_NJ1yCunw?si=5E87OrQMeypxSJ3E)
</details>

View File

@@ -3,10 +3,9 @@
//
#pragma once
#include <array>
#include "omath/linear_algebra/vector3.hpp"
#include "omath/triangle.hpp"
#include "omath/vector3.hpp"
#include <array>
namespace omath::primitives
{

View File

@@ -0,0 +1,16 @@
//
// Created by Vlad on 8/28/2025.
//
#pragma once
#include "omath/linear_algebra/vector3.hpp"
#include "omath/triangle.hpp"
#include <array>
namespace omath::primitives
{
[[nodiscard]]
std::array<Triangle<Vector3<float>>, 2> create_plane(const Vector3<float>& vertex_a,
const Vector3<float>& vertex_b,
const Vector3<float>& direction, float size) noexcept;
}

View File

@@ -6,6 +6,7 @@
#include "omath/angles.hpp"
#include <algorithm>
#include <utility>
#include <format>
namespace omath
{
@@ -149,3 +150,17 @@ namespace omath
}
};
} // namespace omath
template<class Type, Type min, Type max, omath::AngleFlags flags>
struct std::formatter<omath::Angle<Type, min, max, flags>> // NOLINT(*-dcl58-cpp)
{
[[nodiscard]]
static constexpr auto parse(std::format_parse_context& ctx)
{
return ctx.begin();
}
[[nodiscard]]
static auto format(const omath::Angle<Type, min, max, flags>& deg, std::format_context& ctx)
{
return std::format_to(ctx.out(), "{}deg", deg.as_degrees());
}
};

View File

@@ -3,8 +3,8 @@
//
#pragma once
#include "omath/linear_algebra/vector3.hpp"
#include "omath/triangle.hpp"
#include "omath/vector3.hpp"
namespace omath::collision
{

View File

@@ -4,8 +4,7 @@
#pragma once
#include "omath/vector3.hpp"
#include "omath/vector4.hpp"
#include "linear_algebra/vector4.hpp"
#include <cstdint>
namespace omath
@@ -167,3 +166,21 @@ namespace omath
#endif
};
} // namespace omath
template<>
struct std::formatter<omath::Color> // NOLINT(*-dcl58-cpp)
{
[[nodiscard]]
static constexpr auto parse(std::format_parse_context& ctx)
{
return ctx.begin();
}
[[nodiscard]]
static auto format(const omath::Color& col, std::format_context& ctx)
{
return std::format_to(ctx.out(), "[r:{}, g:{}, b:{}, a:{}]",
static_cast<int>(col.x * 255.f),
static_cast<int>(col.y * 255.f),
static_cast<int>(col.z * 255.f),
static_cast<int>(col.w * 255.f));
}
};

View File

@@ -3,9 +3,9 @@
//
#pragma once
#include "omath/linear_algebra/mat.hpp"
#include "omath/linear_algebra/vector3.hpp"
#include <omath/angle.hpp>
#include <omath/mat.hpp>
#include <omath/vector3.hpp>
#include <omath/view_angles.hpp>
namespace omath::iw_engine

View File

@@ -3,9 +3,9 @@
//
#pragma once
#include "omath/linear_algebra/mat.hpp"
#include "omath/linear_algebra/vector3.hpp"
#include <omath/angle.hpp>
#include <omath/mat.hpp>
#include <omath/vector3.hpp>
#include <omath/view_angles.hpp>
namespace omath::opengl_engine

View File

@@ -3,9 +3,9 @@
//
#pragma once
#include "omath/linear_algebra/mat.hpp"
#include "omath/linear_algebra/vector3.hpp"
#include <omath/angle.hpp>
#include <omath/mat.hpp>
#include <omath/vector3.hpp>
#include <omath/view_angles.hpp>
namespace omath::source_engine

View File

@@ -4,9 +4,9 @@
#pragma once
#include "omath/linear_algebra/mat.hpp"
#include "omath/linear_algebra/vector3.hpp"
#include <omath/angle.hpp>
#include <omath/mat.hpp>
#include <omath/vector3.hpp>
#include <omath/view_angles.hpp>
namespace omath::unity_engine

View File

@@ -4,9 +4,9 @@
#pragma once
#include "omath/linear_algebra/mat.hpp"
#include "omath/linear_algebra/vector3.hpp"
#include <omath/angle.hpp>
#include <omath/mat.hpp>
#include <omath/vector3.hpp>
#include <omath/view_angles.hpp>
namespace omath::unreal_engine

View File

@@ -2,7 +2,7 @@
// Created by vlad on 9/29/2024.
//
#pragma once
#include "omath/vector3.hpp"
#include "vector3.hpp"
#include <algorithm>
#include <array>
#include <iomanip>
@@ -479,4 +479,49 @@ namespace omath
{0.f, 0.f, -(far + near) / (far - near), -(2.f * near * far) / (far - near)},
{0.f, 0.f, -1.f, 0.f}};
}
template<class Type = float, MatStoreType St = MatStoreType::ROW_MAJOR>
[[nodiscard]]
Mat<4, 4, Type, St> mat_ortho_left_handed(const Type left, const Type right,
const Type bottom, const Type top,
const Type near, const Type far) noexcept
{
return
{
{ static_cast<Type>(2) / (right - left), 0.f, 0.f, -(right + left) / (right - left)},
{ 0.f, static_cast<Type>(2) / (top - bottom), 0.f, -(top + bottom) / (top - bottom)},
{ 0.f, 0.f, static_cast<Type>(2) / (far - near), -(far + near) / (far - near) },
{ 0.f, 0.f, 0.f, 1.f }
};
}
template<class Type = float, MatStoreType St = MatStoreType::ROW_MAJOR>
[[nodiscard]]
Mat<4, 4, Type, St> mat_ortho_right_handed(const Type left, const Type right,
const Type bottom, const Type top,
const Type near, const Type far) noexcept
{
return
{
{ static_cast<Type>(2) / (right - left), 0.f, 0.f, -(right + left) / (right - left)},
{ 0.f, static_cast<Type>(2) / (top - bottom), 0.f, -(top + bottom) / (top - bottom)},
{ 0.f, 0.f, -static_cast<Type>(2) / (far - near), -(far + near) / (far - near) },
{ 0.f, 0.f, 0.f, 1.f }
};
}
} // namespace omath
template<size_t Rows, size_t Columns, class Type, omath::MatStoreType StoreType>
struct std::formatter<omath::Mat<Rows, Columns, Type, StoreType>> // NOLINT(*-dcl58-cpp)
{
using MatType = omath::Mat<Rows, Columns, Type, StoreType>;
[[nodiscard]]
static constexpr auto parse(std::format_parse_context& ctx)
{
return ctx.begin();
}
[[nodiscard]]
static auto format(const MatType& mat, std::format_context& ctx)
{
return std::format_to(ctx.out(), "{}", mat.to_string());
}
};

View File

@@ -1,7 +1,22 @@
#pragma once
#ifdef OMATH_ENABLE_LEGACY
/*
THIS CODE IS DEPRECATED NEVER EVER USE Matrix CLASS
AND VERY SLOW USE Mat INSTEAD!!!!!!!!!!!
*/
#ifdef OMATH_ENABLE_LEGACY
#include "omath/vector3.hpp"
#include <initializer_list>
#include <memory>

View File

@@ -4,6 +4,7 @@
#pragma once
#include <cmath>
#include <format>
#include <tuple>
#ifdef OMATH_IMGUI_INTEGRATION
@@ -218,7 +219,6 @@ namespace omath
{
return std::make_tuple(x, y);
}
#ifdef OMATH_IMGUI_INTEGRATION
[[nodiscard]]
ImVec2 to_im_vec2() const noexcept
@@ -233,3 +233,18 @@ namespace omath
#endif
};
} // namespace omath
template<class Type>
struct std::formatter<omath::Vector2<Type>> // NOLINT(*-dcl58-cpp)
{
[[nodiscard]]
static constexpr auto parse(std::format_parse_context& ctx)
{
return ctx.begin();
}
[[nodiscard]]
static auto format(const omath::Vector2<Type>& vec, std::format_context& ctx)
{
return std::format_to(ctx.out(), "[{}, {}]", vec.x, vec.y);
}
};

View File

@@ -5,7 +5,7 @@
#pragma once
#include "omath/angle.hpp"
#include "omath/vector2.hpp"
#include "omath/linear_algebra/vector2.hpp"
#include <cstdint>
#include <expected>
#include <functional>
@@ -159,9 +159,9 @@ namespace omath
return Vector2<Type>::length();
}
[[nodiscard]] Type distance_to(const Vector3& vOther) const noexcept
[[nodiscard]] Type distance_to(const Vector3& v_other) const noexcept
{
return (*this - vOther).length();
return (*this - v_other).length();
}
#endif
@@ -279,21 +279,33 @@ namespace omath
}
};
} // namespace omath
// ReSharper disable once CppRedundantNamespaceDefinition
namespace std
template<> struct std::hash<omath::Vector3<float>>
{
template<> struct hash<omath::Vector3<float>>
std::size_t operator()(const omath::Vector3<float>& vec) const noexcept
{
std::size_t operator()(const omath::Vector3<float>& vec) const noexcept
{
std::size_t hash = 0;
constexpr std::hash<float> hasher;
std::size_t hash = 0;
constexpr std::hash<float> hasher;
hash ^= hasher(vec.x) + 0x9e3779b9 + (hash << 6) + (hash >> 2);
hash ^= hasher(vec.y) + 0x9e3779b9 + (hash << 6) + (hash >> 2);
hash ^= hasher(vec.z) + 0x9e3779b9 + (hash << 6) + (hash >> 2);
hash ^= hasher(vec.x) + 0x9e3779b9 + (hash << 6) + (hash >> 2);
hash ^= hasher(vec.y) + 0x9e3779b9 + (hash << 6) + (hash >> 2);
hash ^= hasher(vec.z) + 0x9e3779b9 + (hash << 6) + (hash >> 2);
return hash;
}
};
} // namespace std
return hash;
}
};
template<class Type>
struct std::formatter<omath::Vector3<Type>> // NOLINT(*-dcl58-cpp)
{
[[nodiscard]]
static constexpr auto parse(std::format_parse_context& ctx)
{
return ctx.begin();
}
[[nodiscard]]
static auto format(const omath::Vector3<Type>& vec, std::format_context& ctx)
{
return std::format_to(ctx.out(), "[{}, {}, {}]", vec.x, vec.y, vec.z);
}
};

View File

@@ -4,7 +4,7 @@
#pragma once
#include <algorithm>
#include <omath/vector3.hpp>
#include "omath/linear_algebra/vector3.hpp"
namespace omath
{
@@ -201,3 +201,18 @@ namespace omath
#endif
};
} // namespace omath
template<class Type>
struct std::formatter<omath::Vector4<Type>> // NOLINT(*-dcl58-cpp)
{
[[nodiscard]]
static constexpr auto parse(std::format_parse_context& ctx)
{
return ctx.begin();
}
[[nodiscard]]
static auto format(const omath::Vector4<Type>& vec, std::format_context& ctx)
{
return std::format_to(ctx.out(), "[{}, {}, {}, {}]", vec.x, vec.y, vec.z, vec.w);
}
};

View File

@@ -10,13 +10,13 @@
#include "omath/angle.hpp"
// Vector classes (in dependency order)
#include "omath/vector2.hpp"
#include "omath/vector3.hpp"
#include "omath/vector4.hpp"
#include "omath/linear_algebra/vector2.hpp"
#include "omath/linear_algebra/vector4.hpp"
#include "omath/linear_algebra/vector3.hpp"
// Matrix classes
#include "omath/mat.hpp"
#include "omath/matrix.hpp"
#include "linear_algebra/matrix.hpp"
#include "omath/linear_algebra/mat.hpp"
// Color functionality
#include "omath/color.hpp"

View File

@@ -3,8 +3,8 @@
//
#pragma once
#include "omath/linear_algebra/vector3.hpp"
#include "omath/pathfinding/navigation_mesh.hpp"
#include "omath/vector3.hpp"
#include <vector>
namespace omath::pathfinding

View File

@@ -4,7 +4,7 @@
#pragma once
#include "omath/vector3.hpp"
#include "omath/linear_algebra/vector3.hpp"
#include <expected>
#include <string>
#include <vector>

View File

@@ -2,9 +2,9 @@
// Created by Vlad on 2/23/2025.
//
#pragma once
#include "omath/linear_algebra/vector3.hpp"
#include "omath/projectile_prediction/projectile.hpp"
#include "omath/projectile_prediction/target.hpp"
#include "omath/vector3.hpp"
namespace omath::projectile_prediction
{

View File

@@ -4,11 +4,11 @@
#pragma once
#include "omath/linear_algebra/vector3.hpp"
#include "omath/engines/source_engine/traits/pred_engine_trait.hpp"
#include "omath/projectile_prediction/proj_pred_engine.hpp"
#include "omath/projectile_prediction/projectile.hpp"
#include "omath/projectile_prediction/target.hpp"
#include "omath/vector3.hpp"
#include <optional>
namespace omath::projectile_prediction

View File

@@ -3,7 +3,7 @@
//
#pragma once
#include "omath/vector3.hpp"
#include "omath/linear_algebra/vector3.hpp"
namespace omath::projectile_prediction
{

View File

@@ -3,7 +3,7 @@
//
#pragma once
#include "omath/vector3.hpp"
#include "omath/linear_algebra/vector3.hpp"
namespace omath::projectile_prediction
{

View File

@@ -5,10 +5,10 @@
#pragma once
#include "omath/projection/error_codes.hpp"
#include "omath/linear_algebra/mat.hpp"
#include "omath/linear_algebra/vector3.hpp"
#include <expected>
#include <omath/angle.hpp>
#include <omath/mat.hpp>
#include <omath/vector3.hpp>
#include <type_traits>
namespace omath::projection

View File

@@ -2,7 +2,7 @@
// Created by Orange on 11/13/2024.
//
#pragma once
#include "omath/vector3.hpp"
#include "linear_algebra/vector3.hpp"
namespace omath
{

View File

@@ -0,0 +1,19 @@
//
// Created by Vlad on 8/28/2025.
//
#include "omath/3d_primitives/plane.hpp"
namespace omath::primitives
{
std::array<Triangle<Vector3<float>>, 2> create_plane(const Vector3<float>& vertex_a,
const Vector3<float>& vertex_b,
const Vector3<float>& direction, const float size) noexcept
{
const auto second_vertex_a = vertex_a + direction * size;
return std::array
{
Triangle{second_vertex_a, vertex_a, vertex_b},
Triangle{second_vertex_a, vertex_b + direction * size, vertex_b}
};
}
} // namespace omath::primitives

View File

@@ -2,10 +2,10 @@
// Revised unittest suite for LineTracer (segmentbased MöllerTrumbore)
// Pure ASCII: avoids nonstandard characters that MSVC rejects.
//
#include "gtest/gtest.h"
#include "omath/linear_algebra/vector3.hpp"
#include "omath/collision/line_tracer.hpp"
#include "omath/triangle.hpp"
#include "omath/vector3.hpp"
#include "gtest/gtest.h"
#include <cmath>
using namespace omath;

View File

@@ -1,7 +1,7 @@
// UnitTestMat.cpp
#include "omath/linear_algebra/mat.hpp"
#include "omath/linear_algebra/vector3.hpp"
#include <gtest/gtest.h>
#include "omath/mat.hpp"
#include "omath/vector3.hpp"
using namespace omath;
@@ -125,7 +125,7 @@ TEST_F(UnitTestMat, Clear)
TEST_F(UnitTestMat, ToString)
{
const std::string str = m2.to_string();
const std::string str = std::format("{}", m2);
EXPECT_FALSE(str.empty());
EXPECT_EQ(str, "[[ 1.000, 2.000]\n [ 3.000, 4.000]]");
}

View File

@@ -1,11 +1,10 @@
//
// Created by Orange on 1/6/2025.
//
#include "omath/triangle.hpp"
#include "omath/linear_algebra/vector3.hpp"
#include <cmath> // For std::sqrt, std::isinf, std::isnan
#include <gtest/gtest.h>
#include <omath/vector3.hpp>
#include "omath/triangle.hpp"
using namespace omath;

View File

@@ -2,10 +2,10 @@
// Created by Vlad on 02.09.2024.
//
#include <omath/linear_algebra/vector2.hpp>
#include <cfloat> // For FLT_MAX and FLT_MIN
#include <cmath> // For std::isinf and std::isnan
#include <gtest/gtest.h>
#include <omath/vector2.hpp>
using namespace omath;

View File

@@ -2,11 +2,11 @@
// Created by Vlad on 01.09.2024.
//
#include <omath/linear_algebra/vector3.hpp>
#include <cfloat> // For FLT_MAX, FLT_MIN
#include <cmath>
#include <gtest/gtest.h>
#include <limits> // For std::numeric_limits
#include <omath/vector3.hpp>
using namespace omath;

View File

@@ -5,9 +5,9 @@
// Vector4Test.cpp
//
#include <omath/linear_algebra/vector4.hpp>
#include <gtest/gtest.h>
#include <limits> // For std::numeric_limits
#include <omath/vector4.hpp>
using namespace omath;