Files
omath/docs/engines/frostbite/mesh_trait.md
2025-11-13 15:19:36 +00:00

2.7 KiB
Raw Blame History

omath::frostbite_engine::MeshTrait — mesh transformation trait for Frostbite Engine

Header: omath/engines/frostbite_engine/traits/mesh_trait.hpp Namespace: omath::frostbite_engine Purpose: provide Frostbite Engine-specific rotation matrix computation for omath::primitives::Mesh


Summary

MeshTrait is a trait class that provides the rotation_matrix function for transforming meshes in Frostbite's coordinate system. It serves as a template parameter to omath::primitives::Mesh, enabling engine-specific rotation behavior.


Coordinate System

Frostbite Engine uses:

  • Up axis: +Y
  • Forward axis: +Z
  • Right axis: +X
  • Handedness: Right-handed
  • Rotation order: Pitch (X) → Yaw (Y) → Roll (Z)

API

namespace omath::frostbite_engine {

class MeshTrait final {
public:
    [[nodiscard]]
    static Mat4X4 rotation_matrix(const ViewAngles& rotation);
};

} // namespace omath::frostbite_engine

Method: rotation_matrix

static Mat4X4 rotation_matrix(const ViewAngles& rotation);

Computes a 4×4 rotation matrix from Frostbite-style Euler angles.

Parameters:

  • rotationViewAngles containing pitch, yaw, and roll angles

Returns: 4×4 rotation matrix suitable for mesh transformation

Implementation: Delegates to frostbite_engine::rotation_matrix(rotation) defined in formulas.hpp.


Usage

With Mesh

using namespace omath::frostbite_engine;

// Create mesh (MeshTrait is used automatically)
Mesh my_mesh(vertices, indices);

// Set rotation using ViewAngles
ViewAngles angles;
angles.pitch = PitchAngle::from_degrees(30.0f);
angles.yaw = YawAngle::from_degrees(45.0f);
angles.roll = RollAngle::from_degrees(0.0f);

my_mesh.set_rotation(angles);

// The rotation matrix is computed using MeshTrait::rotation_matrix
auto matrix = my_mesh.get_to_world_matrix();

Rotation Conventions

Frostbite uses a right-handed Y-up coordinate system:

  1. Pitch (rotation around X-axis / right axis)

    • Positive pitch looks upward (+Y direction)
    • Range: typically [-89°, 89°]
  2. Yaw (rotation around Y-axis / up axis)

    • Positive yaw rotates counterclockwise when viewed from above (right-handed)
    • Range: [-180°, 180°]
  3. Roll (rotation around Z-axis / forward axis)

    • Positive roll tilts right
    • Range: [-180°, 180°]

Type Alias

namespace omath::frostbite_engine {
    using Mesh = primitives::Mesh<Mat4X4, ViewAngles, MeshTrait, float>;
}

See Also


Last updated: 13 Nov 2025