OROCHI
 
Loading...
Searching...
No Matches
GxQuaternion.h
Go to the documentation of this file.
1//===========================================================================
10//===========================================================================
11#pragma once
12
13GX_CORE_NAMESPACE_BEGIN()
14
15//===========================================================================
17//===========================================================================
18GX_ALIGN16_BEGIN struct GxQuaternion : public GxStructBase
19{
20 //-------------------------------------------------------------
22 //-------------------------------------------------------------
24public:
25 GX_RTTI_STRUCT(GxQuaternion)
26
27 static constexpr u32 DIMENSION = 4;
28 static const GxQuaternion ZERO;
29 static const GxQuaternion IDENTITY;
30
32 //-------------------------------------------------------------
34 //-------------------------------------------------------------
36
38 GxQuaternion(void) : _x(0.f), _y(0.f), _z(0.f), _w(0.f){}
40 GX_FORCE_INLINE GxQuaternion(f32 x, f32 y, f32 z, f32 w);
42 GX_FORCE_INLINE GxQuaternion(const GxFloat4& float4);
44 GX_FORCE_INLINE GxQuaternion(const f32* pFloatArray);
46 GX_FORCE_INLINE GxQuaternion(const GxVector3& vector, f32 w);
48 GX_FORCE_INLINE GxQuaternion(const GxVector4& vector);
50 GX_FORCE_INLINE GxQuaternion(const GxMatrixAffine& matrix);
52 GX_FORCE_INLINE GxQuaternion(const GxMatrix44& matrix);
53
55 GX_FORCE_INLINE GxQuaternion(const GxQuaternion& quaternion);
56
58 //-------------------------------------------------------------
60 //-------------------------------------------------------------
62
64 GX_FORCE_INLINE GxQuaternion& operator = (const GxQuaternion& quaternion);
66 GX_FORCE_INLINE GxQuaternion& operator += (f32 scalar);
68 GX_FORCE_INLINE GxQuaternion& operator -= (f32 scalar);
70 GX_FORCE_INLINE GxQuaternion& operator *= (f32 scalar);
72 GX_FORCE_INLINE GxQuaternion& operator /= (f32 scalar);
74 GX_FORCE_INLINE GxQuaternion& operator += (const GxQuaternion& quaternion);
76 GX_FORCE_INLINE GxQuaternion& operator -= (const GxQuaternion& quaternion);
78 GX_FORCE_INLINE GxQuaternion& operator *= (const GxQuaternion& quaternion);
80 friend GX_FORCE_INLINE const GxQuaternion operator + (const GxQuaternion& quaternion){ return quaternion; }
82 friend GX_FORCE_INLINE const GxQuaternion operator - (const GxQuaternion& quaternion){ return quaternion * -1.0f; }
84 friend GX_FORCE_INLINE const GxQuaternion operator + (const GxQuaternion& quaternion, f32 scalar);
86 friend GX_FORCE_INLINE const GxQuaternion operator - (const GxQuaternion& quaternion, f32 scalar);
88 friend GX_FORCE_INLINE const GxQuaternion operator * (const GxQuaternion& quaternion, f32 scalar);
90 friend GX_FORCE_INLINE const GxQuaternion operator * (f32 scalar, const GxQuaternion& quaternion);
92 friend GX_FORCE_INLINE const GxQuaternion operator / (const GxQuaternion& quaternion, f32 scalar);
94 friend GX_FORCE_INLINE const GxQuaternion operator + (const GxQuaternion& quaternion0, const GxQuaternion& quaternion1);
96 friend GX_FORCE_INLINE const GxQuaternion operator - (const GxQuaternion& quaternion0, const GxQuaternion& quaternion1);
98 friend GX_FORCE_INLINE const GxQuaternion operator * (const GxQuaternion& quaternion0, const GxQuaternion& quaternion1);
100 friend GX_FORCE_INLINE b32 operator == (const GxQuaternion& quaternion0, const GxQuaternion& quaternion1);
102 friend GX_FORCE_INLINE b32 operator != (const GxQuaternion& quaternion0, const GxQuaternion& quaternion1);
103
105 //-------------------------------------------------------------
107 //-------------------------------------------------------------
109
111 GX_FORCE_INLINE f32 getLength(void) const;
113 GX_FORCE_INLINE f32 getLengthSquare(void) const;
115 GX_FORCE_INLINE GxQuaternion getNormalize(void) const;
117 GX_FORCE_INLINE GxQuaternion getNormalizeEx(void) const;
119 GX_FORCE_INLINE GxQuaternion getConjugate(void) const;
121 GX_FORCE_INLINE GxQuaternion getInverse(void) const;
123 GX_FORCE_INLINE GxVector3 getRotate(void) const { return GxMatrix44(*this).getRotateXYZ(); };
125 GX_FORCE_INLINE void setRotate(const GxVector3& vector);
127 void setRotate(const GxMatrixAffine& matrix);
129 void setRotate(const GxMatrix44& matrix);
131 void setRotate(const GxVector3& axis, f32 radian);
133 void setRotate(f32 yaw, f32 pitch, f32 roll);
135 void setRotate(const GxVector3& startVector, const GxVector3& targetVector);
137 void setRotate(const GxVector3& startVector, const GxVector3& targetVector, f32 radian);
139 void setRotate(const GxVector3& axis, const GxVector3& startVector, const GxVector3& targetVector, f32 radian);
141 void setRotateEx(const GxVector3& axis, f32 radian);
143 void setRotateEx(const GxVector3& startVector, const GxVector3& targetVector);
145 void setRotateEx(const GxVector3& startVector, const GxVector3& targetVector, f32 radian);
147 void setRotateEx(const GxVector3& axis, const GxVector3& startVector, const GxVector3& targetVector, f32 radian);
149 GX_FORCE_INLINE void setRotateX(f32 radian);
151 GX_FORCE_INLINE void setRotateY(f32 radian);
153 GX_FORCE_INLINE void setRotateZ(f32 radian);
155 GX_FORCE_INLINE void setRotateXYZ(f32 x, f32 y, f32 z) { setRotateX(x); mulRotateY(y); mulRotateZ(z); }
157 GX_FORCE_INLINE void setRotateXZY(f32 x, f32 y, f32 z) { setRotateX(x); mulRotateZ(z); mulRotateY(y); }
159 GX_FORCE_INLINE void setRotateYXZ(f32 x, f32 y, f32 z) { setRotateY(y); mulRotateX(x); mulRotateZ(z); }
161 GX_FORCE_INLINE void setRotateYZX(f32 x, f32 y, f32 z) { setRotateY(y); mulRotateZ(z); mulRotateX(x); }
163 GX_FORCE_INLINE void setRotateZXY(f32 x, f32 y, f32 z) { setRotateZ(z); mulRotateX(x); mulRotateY(y); }
165 GX_FORCE_INLINE void setRotateZYX(f32 x, f32 y, f32 z) { setRotateZ(z); mulRotateY(y); mulRotateX(x); }
166
168 static GX_FORCE_INLINE const GxQuaternion& getAddScalar(GxQuaternion& dst, const GxQuaternion& quaternion, f32 scalar);
170 static GX_FORCE_INLINE const GxQuaternion& getSubScalar(GxQuaternion& dst, const GxQuaternion& quaternion, f32 scalar);
172 static GX_FORCE_INLINE const GxQuaternion& getMulScalar(GxQuaternion& dst, const GxQuaternion& quaternion, f32 scalar);
174 static GX_FORCE_INLINE const GxQuaternion& getDivScalar(GxQuaternion& dst, const GxQuaternion& quaternion, f32 scalar);
176 static GX_FORCE_INLINE const GxQuaternion& getAddQuaternion(GxQuaternion& dst, const GxQuaternion& quaternion0, const GxQuaternion& quaternion1);
178 static GX_FORCE_INLINE const GxQuaternion& getSubQuaternion(GxQuaternion& dst, const GxQuaternion& quaternion0, const GxQuaternion& quaternion1);
180 static GX_FORCE_INLINE const GxQuaternion& getMulQuaternion(GxQuaternion& dst, const GxQuaternion& quaternion0, const GxQuaternion& quaternion1);
182 static GX_FORCE_INLINE const GxQuaternion& getNormalize(GxQuaternion& dst, const GxQuaternion& quaternion);
184 static GX_FORCE_INLINE const GxQuaternion& getNormalizeEx(GxQuaternion& dst, const GxQuaternion& quaternion);
186 static GX_FORCE_INLINE const GxQuaternion& getConjugate(GxQuaternion& dst, const GxQuaternion& quaternion);
188 static GX_FORCE_INLINE const GxQuaternion& getInverse(GxQuaternion& dst, const GxQuaternion& quaternion);
190 static GX_FORCE_INLINE const GxQuaternion& getMulRotateX(GxQuaternion& dst, const GxQuaternion& quaternion, f32 radian);
192 static GX_FORCE_INLINE const GxQuaternion& getMulRotateY(GxQuaternion& dst, const GxQuaternion& quaternion, f32 radian);
194 static GX_FORCE_INLINE const GxQuaternion& getMulRotateZ(GxQuaternion& dst, const GxQuaternion& quaternion, f32 radian);
196 static GX_FORCE_INLINE const GxQuaternion& getMulRotateXYZ(GxQuaternion& dst, const GxQuaternion& quaternion, f32 radianX, f32 radianY, f32 radianZ);
198 static GX_FORCE_INLINE const GxQuaternion& getMulRotateXZY(GxQuaternion& dst, const GxQuaternion& quaternion, f32 radianX, f32 radianY, f32 radianZ);
200 static GX_FORCE_INLINE const GxQuaternion& getMulRotateYXZ(GxQuaternion& dst, const GxQuaternion& quaternion, f32 radianX, f32 radianY, f32 radianZ);
202 static GX_FORCE_INLINE const GxQuaternion& getMulRotateYZX(GxQuaternion& dst, const GxQuaternion& quaternion, f32 radianX, f32 radianY, f32 radianZ);
204 static GX_FORCE_INLINE const GxQuaternion& getMulRotateZXY(GxQuaternion& dst, const GxQuaternion& quaternion, f32 radianX, f32 radianY, f32 radianZ);
206 static GX_FORCE_INLINE const GxQuaternion& getMulRotateZYX(GxQuaternion& dst, const GxQuaternion& quaternion, f32 radianX, f32 radianY, f32 radianZ);
208 static GX_FORCE_INLINE f32 getDot(const GxQuaternion& quaternion0, const GxQuaternion& quaternion1);
210 static GX_FORCE_INLINE const GxQuaternion& getLerp(GxQuaternion& dst, const GxQuaternion& quaternion0, const GxQuaternion& quaternion1, f32 t);
212 static GX_FORCE_INLINE const GxQuaternion& getSphericalLerp(GxQuaternion& dst, const GxQuaternion& quaternion0, const GxQuaternion& quaternion1, f32 t);
213
215 //-------------------------------------------------------------
217 //-------------------------------------------------------------
219
221 GX_FORCE_INLINE const GxQuaternion& addScalar(f32 scalar);
223 GX_FORCE_INLINE const GxQuaternion& subScalar(f32 scalar);
225 GX_FORCE_INLINE const GxQuaternion& mulScalar(f32 scalar);
227 GX_FORCE_INLINE const GxQuaternion& divScalar(f32 scalar);
229 GX_FORCE_INLINE const GxQuaternion& addQuaternion(const GxQuaternion& quaternion);
231 GX_FORCE_INLINE const GxQuaternion& subQuaternion(const GxQuaternion& quaternion);
233 GX_FORCE_INLINE const GxQuaternion& mulQuaternion(const GxQuaternion& quaternion);
234
236 GX_FORCE_INLINE const GxQuaternion& normalize(void);
238 GX_FORCE_INLINE const GxQuaternion& normalizeEx(void);
240 GX_FORCE_INLINE const GxQuaternion& conjugate(void);
242 GX_FORCE_INLINE const GxQuaternion& inverse(void);
244 GX_FORCE_INLINE const GxQuaternion& mulRotateX(f32 radian);
246 GX_FORCE_INLINE const GxQuaternion& mulRotateY(f32 radian);
248 GX_FORCE_INLINE const GxQuaternion& mulRotateZ(f32 radian);
250 GX_FORCE_INLINE const GxQuaternion& mulRotateXYZ(f32 radianX, f32 radianY, f32 radianZ);
252 GX_FORCE_INLINE const GxQuaternion& mulRotateXZY(f32 radianX, f32 radianY, f32 radianZ);
254 GX_FORCE_INLINE const GxQuaternion& mulRotateYXZ(f32 radianX, f32 radianY, f32 radianZ);
256 GX_FORCE_INLINE const GxQuaternion& mulRotateYZX(f32 radianX, f32 radianY, f32 radianZ);
258 GX_FORCE_INLINE const GxQuaternion& mulRotateZXY(f32 radianX, f32 radianY, f32 radianZ);
260 GX_FORCE_INLINE const GxQuaternion& mulRotateZYX(f32 radianX, f32 radianY, f32 radianZ);
261
262#if GX_DEVELOP
263 // 書き込み
264 b32 write(GxStreamWriter& writer);
265#endif //GX_DEVELOP
267 //-------------------------------------------------------------
269 //-------------------------------------------------------------
271
272 f32 _x;
273 f32 _y;
274 f32 _z;
275 f32 _w;
276
278} GX_ALIGN16_END;
279
280GX_CORE_NAMESPACE_END()
GX_FORCE_INLINE const GxColor operator*(const GxColor color, f32 scalar)
Definition GxColor.inl:202
GX_FORCE_INLINE b32 operator==(const GxColor color0, const GxColor color1)
Definition GxColor.inl:274
GX_FORCE_INLINE const GxColor operator/(const GxColor color, f32 scalar)
Definition GxColor.inl:226
GX_FORCE_INLINE const GxColor operator+(const GxColor color, u32 scalar)
Definition GxColor.inl:178
GX_FORCE_INLINE b32 operator!=(const GxColor color0, const GxColor color1)
Definition GxColor.inl:285
GX_FORCE_INLINE const GxColor operator-(const GxColor color, u32 scalar)
Definition GxColor.inl:190
@ ZERO
全て 0 で初期化
@ IDENTITY
基礎値で初期化
ストリーム書き込みクラス
Definition GxStreamWriter.h:19
4次元浮動小数点数クラス
Definition GxStruct.h:153
4×4行列(行優先)
Definition GxMatrix.h:607
GX_FORCE_INLINE GxVector3 getRotateXYZ(void) const
XYZ軸回転角を取得
Definition GxMatrix.inl:3832
アフィン変換行列(行優先)
Definition GxMatrix.h:330
クォータニオン
Definition GxQuaternion.h:19
GX_FORCE_INLINE void setRotateXZY(f32 x, f32 y, f32 z)
XZY軸回転を設定
Definition GxQuaternion.h:157
f32 _x
X値
Definition GxQuaternion.h:272
GX_FORCE_INLINE void setRotateZXY(f32 x, f32 y, f32 z)
ZXY軸回転を設定
Definition GxQuaternion.h:163
f32 _w
W値
Definition GxQuaternion.h:275
GX_FORCE_INLINE void setRotateXYZ(f32 x, f32 y, f32 z)
XYZ軸回転を設定
Definition GxQuaternion.h:155
GX_FORCE_INLINE void setRotateYXZ(f32 x, f32 y, f32 z)
YXZ軸回転を設定
Definition GxQuaternion.h:159
GX_FORCE_INLINE GxVector3 getRotate(void) const
回転を取得
Definition GxQuaternion.h:123
f32 _y
Y値
Definition GxQuaternion.h:273
GX_FORCE_INLINE void setRotateZYX(f32 x, f32 y, f32 z)
ZYX軸回転を設定
Definition GxQuaternion.h:165
GX_FORCE_INLINE void setRotateYZX(f32 x, f32 y, f32 z)
YZX軸回転を設定
Definition GxQuaternion.h:161
f32 _z
Z値
Definition GxQuaternion.h:274
Definition GxBase.h:24
3次元ベクトル
Definition GxVector.h:245
4次元ベクトル
Definition GxVector.h:582
32bitブーリアン
Definition GxDefine.h:173