Program Listing for File Matrix.hpp

Return to documentation for file (include/ari/math/Matrix.hpp)

#pragma once

#include "../aridef.hpp"
#include "bx/macros.h"
#include "bx/float4x4_t.h"
#include "Vector.hpp"

namespace ari
{
    BX_ALIGN_DECL_16(struct) Matrix
    {
        union
        {
            float v[16];
            struct
            {
                float _11, _12, _13, _14;
                float _21, _22, _23, _24;
                float _31, _32, _33, _34;
                float _41, _42, _43, _44;
            };
            bx::float4x4_t f;
        };

        Matrix() :
            _11(1.0f), _12(0.0f), _13(0.0f), _14(0.0f),
            _21(0.0f), _22(1.0f), _23(0.0f), _24(0.0f),
            _31(0.0f), _32(0.0f), _33(1.0f), _34(0.0f),
            _41(0.0f), _42(0.0f), _43(0.0f), _44(1.0f)
        { }

        void Identity();

        Matrix operator *(const Matrix &m) const;

        void operator *=(const Matrix &m);

        void SetPositionRotation(const Vector3& position,
            const Vector3& rotation);

        void SetTransform(const Vector3& position,
            const Vector3& rotation,
            const Vector3& scale);

    }; // Matrix

} // ari