1#ifndef NW_MATH_TYPES_H_
2#define NW_MATH_TYPES_H_
6#include <nw/math/math_Config.h>
7#include <nw/math/math_Triangular.h>
8#include <nw/math/math_Vector2.h>
9#include <nw/math/math_Vector3.h>
10#include <nw/math/math_Vector4.h>
11#include <nw/math/math_Quaternion.h>
15#include <nw/math/math_Matrix34.h>
16#include <nw/math/math_Matrix44.h>
18#include <nw/math/math_Transform.h>
22namespace nw {
namespace math {
44#if defined(NW_MATH_ENABLE_INTRINSICS)
67namespace nw {
namespace math {
75 VEC3*
__restrict pOutBase = pOut;
76 const f32 (*
const m)[4] = pM->m;
78 for (s32 i = 0; i < count; ++i)
81 vTmp.x = m[0][0] * pV->x + m[0][1] * pV->y + m[0][2] * pV->z + m[0][3];
82 vTmp.y = m[1][0] * pV->x + m[1][1] * pV->y + m[1][2] * pV->z + m[1][3];
83 vTmp.z = m[2][0] * pV->x + m[2][1] * pV->y + m[2][2] * pV->z + m[2][3];
101 for (u32 i = 0; i < count; ++i)
103 (
void)
standard::VEC3Transform(pDst, pM, pV);
115 tmp.x = pM->f._00 * pV->x + pM->f._01 * pV->y + pM->f._02 * pV->z;
116 tmp.y = pM->f._10 * pV->x + pM->f._11 * pV->y + pM->f._12 * pV->z;
117 tmp.z = pM->f._20 * pV->x + pM->f._21 * pV->y + pM->f._22 * pV->z;
133 for (i = 0; i < count; i++)
136 tmp.x = pM->f._00 * pV->x + pM->f._01 * pV->y + pM->f._02 * pV->z;
137 tmp.y = pM->f._10 * pV->x + pM->f._11 * pV->y + pM->f._12 * pV->z;
138 tmp.z = pM->f._20 * pV->x + pM->f._21 * pV->y + pM->f._22 * pV->z;
158 tmp.x = pM->f._00 * pV->x + pM->f._01 * pV->y + pM->f._02 * pV->z + pM->f._03;
159 tmp.y = pM->f._10 * pV->x + pM->f._11 * pV->y + pM->f._12 * pV->z + pM->f._13;
160 tmp.z = pM->f._20 * pV->x + pM->f._21 * pV->y + pM->f._22 * pV->z + pM->f._23;
161 rw = pM->f._30 * pV->x + pM->f._31 * pV->y + pM->f._32 * pV->z + pM->f._33;
164 pOut->x = rw * tmp.x;
165 pOut->y = rw * tmp.y;
166 pOut->z = rw * tmp.z;
175 for (u32 i = 0; i < count; ++i)
189 tmp.x = pM->f._00 * pV->x + pM->f._01 * pV->y + pM->f._02 * pV->z + pM->f._03 * pV->w;
190 tmp.y = pM->f._10 * pV->x + pM->f._11 * pV->y + pM->f._12 * pV->z + pM->f._13 * pV->w;
191 tmp.z = pM->f._20 * pV->x + pM->f._21 * pV->y + pM->f._22 * pV->z + pM->f._23 * pV->w;
192 tmp.w = pM->f._30 * pV->x + pM->f._31 * pV->y + pM->f._32 * pV->z + pM->f._33 * pV->w;
206 for (u32 i = 0; i < count; ++i)
220 tmp.x = pM->f._00 * pV->x + pM->f._01 * pV->y + pM->f._02 * pV->z + pM->f._03 * pV->w;
221 tmp.y = pM->f._10 * pV->x + pM->f._11 * pV->y + pM->f._12 * pV->z + pM->f._13 * pV->w;
222 tmp.z = pM->f._20 * pV->x + pM->f._21 * pV->y + pM->f._22 * pV->z + pM->f._23 * pV->w;
236 for (u32 i = 0; i < count; ++i)
248#if defined(NW_MATH_ENABLE_INTRINSICS)
732MTX34ToQUAT(
QUAT* pOut,
const MTX34* pMtx)
736 s32 nxt[3] = {1, 2, 0};
739 const f32 (*
const m)[4] = pMtx->m;
741 tr = m[0][0] + m[1][1] + m[2][2];
744 s = (f32)::std::sqrt(tr + 1.0f);
747 pOut->x = (m[2][1] - m[1][2]) * s;
748 pOut->y = (m[0][2] - m[2][0]) * s;
749 pOut->z = (m[1][0] - m[0][1]) * s;
754 if (m[1][1] > m[0][0]) i = 1;
755 if (m[2][2] > m[i][i]) i = 2;
758 s = (f32)::std::sqrt( (m[i][i] - (m[j][j] + m[k][k])) + 1.0f );
764 pOut->w = (m[k][j] - m[j][k]) * s;
765 q[j] = (m[i][j] + m[j][i]) * s;
766 q[k] = (m[i][k] + m[k][i]) * s;
#define NW_MATH_AS_INLINE
Definition math_Config.h:6
#define NW_MATH_INLINE
Definition math_Config.h:7
#define NW_MATH_IMPL_NS
Definition math_Config.h:14
Definition math_Matrix34.h:11
VEC4 * VEC4Transform(VEC4 *pOut, const MTX34 *pM, const VEC4 *pV)
VEC4 * VEC3TransformArray(VEC4 *pOut, const MTX44 *pM, const VEC3 *pV, u32 count)
VEC3 * VEC3TransformNormal(VEC3 *pOut, const MTX34 *pM, const VEC3 *pV)
VEC3 * VEC3TransformNormalArray(VEC3 *pOut, const MTX34 *pM, const VEC3 *pV, u32 count)
VEC3 * VEC3TransformArray(VEC3 *pOut, const MTX34 *pM, const VEC3 *pV, s32 count)
VEC4 * VEC4TransformArray(VEC4 *pOut, const MTX44 *pM, const VEC4 *pV, u32 count)
VEC3 * VEC3TransformCoordArray(VEC3 *pOut, const MTX44 *pM, const VEC3 *pV, u32 count)
VEC4 * VEC4TransformArray(VEC4 *pOut, const MTX34 *pM, const VEC4 *pV, u32 count)
VEC4 * VEC4Transform(VEC4 *pOut, const MTX44 *pM, const VEC4 *pV)
VEC3 * VEC3TransformCoord(VEC3 *pOut, const MTX44 *pM, const VEC3 *pV)
Definition math_Triangular.cpp:3
Definition math_Constant.cpp:5
NW_MATH_INLINE VEC4 * VEC3TransformArray(VEC4 *pOut, const MTX44 *pM, const VEC3 *pV, u32 count)
NW_MATH_INLINE VEC4 * VEC4Transform(VEC4 *pOut, const MTX44 *pM, const VEC4 *pV)
NW_MATH_INLINE VEC4 * VEC4TransformArray(VEC4 *pOut, const MTX44 *pM, const VEC4 *pV, u32 n)
NW_MATH_INLINE VEC4 * VEC4Transform(VEC4 *pOut, const MTX34 *pM, const VEC4 *pV)
NW_MATH_INLINE VEC3 * VEC3TransformCoordArray(VEC3 *pOut, const MTX44 *pM, const VEC3 *pV, u32 count)
NW_MATH_INLINE VEC3 * VEC3TransformArray(VEC3 *pOut, const MTX34 *pM, const VEC3 *pV, s32 count)
NW_MATH_INLINE VEC3 * VEC3TransformNormal(VEC3 *pOut, const MTX34 *pM, const VEC3 *pV)
NW_MATH_INLINE VEC3 * VEC3TransformCoord(VEC3 *pOut, const MTX44 *pM, const VEC3 *pV)
NW_MATH_INLINE VEC3 * VEC3TransformNormalArray(VEC3 *pOutArray, const MTX34 *pM, const VEC3 *pArray, u32 n)
NW_MATH_INLINE VEC4 * VEC4TransformArray(VEC4 *pOut, const MTX34 *pM, const VEC4 *pV, u32 n)
Definition math_Constant.cpp:5
Definition math_Matrix34.h:136
Definition math_Matrix44.h:189
Definition math_Quaternion.h:84
Definition math_Vector2.h:49
Definition math_Vector3.h:62
Definition math_Vector4.h:69