# Getting Started Welcome to OMath! This guide will help you get up and running with the library quickly. ## What is OMath? OMath is a modern, blazingly fast C++ math library designed for: - **Game development** and cheat development - **Graphics programming** (DirectX/OpenGL/Vulkan) - **3D applications** with support for multiple game engines - **High-performance computing** with AVX2 optimizations Key features: - 100% independent, no legacy C++ code - Fully `constexpr` template-based design - Zero additional dependencies (except for unit tests) - Cross-platform (Windows, macOS, Linux) - Built-in support for Source, Unity, Unreal, Frostbite, IWEngine, and OpenGL coordinate systems --- ## Installation Choose one of the following methods to install OMath: ### Using vcpkg (Recommended) ```bash vcpkg install orange-math ``` Then in your CMakeLists.txt: ```cmake find_package(omath CONFIG REQUIRED) target_link_libraries(your_target PRIVATE omath::omath) ``` ### Using xrepo ```bash xrepo install omath ``` Then in your xmake.lua: ```lua add_requires("omath") target("your_target") add_packages("omath") ``` ### Building from Source See the detailed [Installation Guide](install.md) for complete instructions. --- ## Quick Example Here's a simple example to get you started: ```cpp #include #include int main() { using namespace omath; // Create 3D vectors Vector3 a{1.0f, 2.0f, 3.0f}; Vector3 b{4.0f, 5.0f, 6.0f}; // Vector operations auto sum = a + b; // Vector addition auto dot_product = a.dot(b); // Dot product: 32.0 auto cross_product = a.cross(b); // Cross product: (-3, 6, -3) auto length = a.length(); // Length: ~3.74 auto normalized = a.normalized(); // Unit vector std::cout << "Sum: [" << sum.x << ", " << sum.y << ", " << sum.z << "]\n"; std::cout << "Dot product: " << dot_product << "\n"; std::cout << "Length: " << length << "\n"; return 0; } ``` --- ## Core Concepts ### 1. Vectors OMath provides 2D, 3D, and 4D vector types: ```cpp using namespace omath; Vector2 vec2{1.0f, 2.0f}; Vector3 vec3{1.0f, 2.0f, 3.0f}; Vector4 vec4{1.0f, 2.0f, 3.0f, 4.0f}; ``` All vector types support: - Arithmetic operations (+, -, *, /) - Dot and cross products (where applicable) - Length and distance calculations - Normalization - Component-wise operations See: [Vector2](linear_algebra/vector2.md), [Vector3](linear_algebra/vector3.md), [Vector4](linear_algebra/vector4.md) ### 2. Matrices 4x4 matrices for transformations: ```cpp using namespace omath; Mat4X4 matrix = Mat4X4::identity(); // Use for transformations, projections, etc. ``` See: [Matrix Documentation](linear_algebra/mat.md) ### 3. Angles Strong-typed angle system with automatic range management: ```cpp using namespace omath; auto angle = Angle::from_degrees(45.0f); auto radians = angle.as_radians(); // View angles for camera systems ViewAngles view{ PitchAngle::from_degrees(-10.0f), YawAngle::from_degrees(90.0f), RollAngle::from_degrees(0.0f) }; ``` See: [Angle](trigonometry/angle.md), [View Angles](trigonometry/view_angles.md) ### 4. 3D Projection Built-in camera and projection systems: ```cpp using namespace omath; using namespace omath::projection; ViewPort viewport{1920.0f, 1080.0f}; auto fov = FieldOfView::from_degrees(90.0f); // Example using Source Engine using namespace omath::source_engine; Camera cam( Vector3{0, 0, 100}, // Position ViewAngles{}, // Angles viewport, fov, 0.1f, // near plane 1000.0f // far plane ); // Project 3D point to 2D screen Vector3 world_pos{100, 50, 75}; if (auto screen_pos = cam.world_to_screen(world_pos)) { std::cout << "Screen: " << screen_pos->x << ", " << screen_pos->y << "\n"; } ``` See: [Camera](projection/camera.md) ### 5. Game Engine Support OMath provides pre-configured traits for major game engines: ```cpp // Source Engine #include using SourceCamera = omath::source_engine::Camera; // Unity Engine #include using UnityCamera = omath::unity_engine::Camera; // Unreal Engine #include using UnrealCamera = omath::unreal_engine::Camera; // And more: OpenGL, Frostbite, IWEngine ``` Each engine has its own coordinate system conventions automatically handled. See: Engine-specific docs in [engines/](engines/) folder --- ## Common Use Cases ### World-to-Screen Projection ```cpp using namespace omath; using namespace omath::source_engine; Camera cam = /* initialize camera */; Vector3 enemy_position{100, 200, 50}; if (auto screen = cam.world_to_screen(enemy_position)) { // Draw ESP box at screen->x, screen->y std::cout << "Enemy on screen at: " << screen->x << ", " << screen->y << "\n"; } else { // Enemy not visible (behind camera or outside frustum) } ``` ### Projectile Prediction ```cpp using namespace omath::projectile_prediction; Projectile bullet{ Vector3{0, 0, 0}, // shooter position 1000.0f, // muzzle velocity (m/s) Vector3{0, 0, -9.81f} // gravity }; Target enemy{ Vector3{100, 200, 50}, // position Vector3{10, 0, 0} // velocity }; // Calculate where to aim ProjPredEngineLegacy engine; if (auto aim_point = engine.maybe_calculate_aim_point(bullet, enemy)) { // Aim at *aim_point to hit moving target } ``` See: [Projectile Prediction](projectile_prediction/projectile_engine.md) ### Collision Detection ```cpp using namespace omath; // Ray-plane intersection Plane ground{ Vector3{0, 0, 0}, // point on plane Vector3{0, 0, 1} // normal (pointing up) }; Vector3 ray_origin{0, 0, 100}; Vector3 ray_direction{0, 0, -1}; if (auto hit = ground.intersects_ray(ray_origin, ray_direction)) { std::cout << "Hit ground at: " << hit->x << ", " << hit->y << ", " << hit->z << "\n"; } ``` See: [Collision Detection](collision/line_tracer.md) ### Pattern Scanning ```cpp #include using namespace omath; std::vector memory = /* ... */; PatternView pattern{"48 8B 05 ?? ?? ?? ?? 48 85 C0"}; if (auto result = pattern_scan(memory, pattern)) { std::cout << "Pattern found at offset: " << result->offset << "\n"; } ``` See: [Pattern Scanning](utility/pattern_scan.md) --- ## Next Steps Now that you have the basics, explore these topics: 1. **[API Reference](index.md)** - Complete API documentation 2. **[Examples](../examples/)** - Working code examples 3. **[Engine-Specific Features](engines/)** - Deep dive into game engine support 4. **[Advanced Topics](#)** - Performance optimization, custom traits, etc. --- ## Getting Help - **Documentation**: [http://libomath.org](http://libomath.org) - **Discord**: [Join our community](https://discord.gg/eDgdaWbqwZ) - **Telegram**: [@orangennotes](https://t.me/orangennotes) - **Issues**: [GitHub Issues](https://github.com/orange-cpp/omath/issues) --- *Last updated: 1 Nov 2025*