OROCHI
 
Loading...
Searching...
No Matches
GxMatrix.h
Go to the documentation of this file.
1//===========================================================================
10//===========================================================================
11#pragma once
12
13GX_CORE_NAMESPACE_BEGIN()
14
15#define GX_MATRIX_SAFE_MODE 0
16
17struct GxFloat2;
18struct GxFloat3;
19struct GxFloat4;
20struct GxSize;
21struct GxPoint2;
22struct GxRect;
23struct GxVector2;
24struct GxVector3;
25struct GxVector4;
26struct GxMatrixAffine;
28struct GxMatrix44;
29struct GxQuaternion;
30struct GxColorHDR;
31class GxStreamWriter;
32
33//===========================================================================
35//===========================================================================
36GX_ALIGN16_BEGIN struct GxMatrix22 : public GxStructBase
37{
38 //-------------------------------------------------------------
40 //-------------------------------------------------------------
42public:
43 GX_RTTI_STRUCT(GxMatrix22)
44
45
46 static const GxMatrix22 ZERO;
48 static const GxMatrix22 IDENTITY;
49
51 //-------------------------------------------------------------
53 //-------------------------------------------------------------
55
57 GxMatrix22(void) {}
59 GX_INLINE GxMatrix22(f32 m00, f32 m01,
60 f32 m10, f32 m11);
61
63 //-------------------------------------------------------------
65 //-------------------------------------------------------------
67
69 GX_FORCE_INLINE GxMatrix22& operator = (const GxMatrix22& matrix);
71 GX_FORCE_INLINE GxMatrix22& operator *= (f32 scalar);
73 GX_FORCE_INLINE GxMatrix22& operator /= (f32 scalar);
75 GX_FORCE_INLINE GxMatrix22& operator += (const GxMatrix22& matrix);
77 GX_FORCE_INLINE GxMatrix22& operator *= (const GxMatrix22& matrix);
79 friend GX_FORCE_INLINE const GxMatrix22 operator * (const GxMatrix22& matrix, f32 scalar);
81 friend GX_FORCE_INLINE const GxMatrix22 operator / (const GxMatrix22& matrix, f32 scalar);
83 friend GX_FORCE_INLINE const GxMatrix22 operator + (const GxMatrix22& matrix0, const GxMatrix22& matrix1);
85 friend GX_FORCE_INLINE const GxMatrix22 operator * (const GxMatrix22& matrix0, const GxMatrix22& matrix1);
87 GX_FORCE_INLINE b32 operator == (const GxMatrix22& matrix);
89 GX_FORCE_INLINE b32 operator != (const GxMatrix22& matrix);
90
92 //-------------------------------------------------------------
94 //-------------------------------------------------------------
96
98 GX_FORCE_INLINE void setIdentity(void);
100 GX_FORCE_INLINE const GxVector2& getRow(u32 row) const;
102 GX_FORCE_INLINE void setRow(u32 row, const GxVector2& vector);
104 GX_FORCE_INLINE GxVector2 getColumn(u32 column) const;
106 GX_FORCE_INLINE void setColumn(u32 column, const GxVector2& vector);
108 GX_FORCE_INLINE f32 getValue(u32 row, u32 column) const;
110 GX_FORCE_INLINE void setValue(u32 row, u32 column, f32 value);
112 GX_FORCE_INLINE f32& getReference(u32 row, u32 column);
114 GX_FORCE_INLINE const f32& getReference(u32 row, u32 column) const;
116 GX_FORCE_INLINE f32 getDeterminant(void) const;
118 GX_FORCE_INLINE GxMatrix22 getInverse(void) const;
120 GX_FORCE_INLINE GxMatrix22 getTranspose(void) const;
121
123 static GX_FORCE_INLINE const GxMatrix22& getMulScalar(GxMatrix22& dst, const GxMatrix22& matrix, f32 scalar);
125 static GX_FORCE_INLINE const GxMatrix22& getDivScalar(GxMatrix22& dst, const GxMatrix22& matrix, f32 scalar);
127 static GX_FORCE_INLINE const GxMatrix22& getAddMatrix(GxMatrix22& dst, const GxMatrix22& matrix0, const GxMatrix22& matrix1);
129 static GX_FORCE_INLINE const GxMatrix22& getMulMatrix(GxMatrix22& dst, const GxMatrix22& matrix0, const GxMatrix22& matrix1);
131 static GX_FORCE_INLINE const GxMatrix22& getInverse(GxMatrix22& dst, const GxMatrix22& matrix);
133 static GX_FORCE_INLINE const GxMatrix22& getTranspose(GxMatrix22& dst, const GxMatrix22& matrix);
134
136 //-------------------------------------------------------------
138 //-------------------------------------------------------------
140
142 GX_FORCE_INLINE const GxMatrix22& mulScalar(f32 scalar);
144 GX_FORCE_INLINE const GxMatrix22& divScalar(f32 scalar);
146 GX_FORCE_INLINE const GxMatrix22& addMatrix(const GxMatrix22& matrix);
148 GX_FORCE_INLINE const GxMatrix22& mulMatrix(const GxMatrix22& matrix);
150 GX_FORCE_INLINE const GxMatrix22& inverse(void);
152 GX_FORCE_INLINE const GxMatrix22& transpose(void);
153
155 //-------------------------------------------------------------
157 //-------------------------------------------------------------
159
160 f32 _m[2][4];
161
163} GX_ALIGN16_END;
164
165//===========================================================================
167//===========================================================================
168GX_ALIGN16_BEGIN struct GxMatrix33 : public GxStructBase
169{
170 //-------------------------------------------------------------
172 //-------------------------------------------------------------
174public:
175 GX_RTTI_STRUCT(GxMatrix33)
176
177
178 static const GxMatrix33 ZERO;
180 static const GxMatrix33 IDENTITY;
181
183 //-------------------------------------------------------------
185 //-------------------------------------------------------------
187
189 GxMatrix33(void) {}
191 GX_INLINE GxMatrix33(f32 m00, f32 m01, f32 m02,
192 f32 m10, f32 m11, f32 m12,
193 f32 m20, f32 m21, f32 m22);
194
196 //-------------------------------------------------------------
198 //-------------------------------------------------------------
200
202 GX_FORCE_INLINE GxMatrix33& operator = (const GxMatrix33& matrix);
204 GX_FORCE_INLINE GxMatrix33& operator *= (f32 scalar);
206 GX_FORCE_INLINE GxMatrix33& operator /= (f32 scalar);
208 GX_FORCE_INLINE GxMatrix33& operator += (const GxMatrix33& matrix);
210 GX_FORCE_INLINE GxMatrix33& operator *= (const GxMatrix33& matrix);
212 friend GX_FORCE_INLINE const GxMatrix33 operator * (const GxMatrix33& matrix, f32 scalar);
214 friend GX_FORCE_INLINE const GxMatrix33 operator / (const GxMatrix33& matrix, f32 scalar);
216 friend GX_FORCE_INLINE const GxMatrix33 operator + (const GxMatrix33& matrix0, const GxMatrix44& matrix1);
218 friend GX_FORCE_INLINE const GxMatrix33 operator * (const GxMatrix33& matrix0, const GxMatrix44& matrix1);
220 GX_FORCE_INLINE b32 operator == (const GxMatrix33& matrix);
222 GX_FORCE_INLINE b32 operator != (const GxMatrix33& matrix);
223
225 //-------------------------------------------------------------
227 //-------------------------------------------------------------
229
231 GX_FORCE_INLINE void setIdentity(void);
233 GX_FORCE_INLINE void setRotate(f32 sinValue, f32 cosValue);
235 GX_FORCE_INLINE void setRotate(f32 radian) { setRotate(sinf(radian), cosf(radian)); }
237 GX_FORCE_INLINE void setTranslate(const GxVector2& vector);
239 GX_FORCE_INLINE void setTranslate(f32 x, f32 y);
241 GX_FORCE_INLINE const GxVector2& getPosition(void) const { return *reinterpret_cast<const GxVector2*>(&_m[2][0]); }
243 GX_FORCE_INLINE void setPosition(const GxVector2& position);
245 GX_FORCE_INLINE void setPosition(f32 x, f32 y);
247 GX_FORCE_INLINE void setScale(const GxVector2& vector);
249 GX_FORCE_INLINE void setScale(f32 x, f32 y);
251 GX_FORCE_INLINE const GxVector3& getRow(u32 row) const;
253 GX_FORCE_INLINE void setRow(u32 row, const GxVector3& vector);
255 GX_FORCE_INLINE GxVector3 getColumn(u32 column) const;
257 GX_FORCE_INLINE void setColumn(u32 column, const GxVector3& vector);
259 GX_FORCE_INLINE f32 getValue(u32 row, u32 column) const;
261 GX_FORCE_INLINE void setValue(u32 row, u32 column, f32 value);
263 GX_FORCE_INLINE f32& getReference(u32 row, u32 column);
265 GX_FORCE_INLINE const f32& getReference(u32 row, u32 column) const;
267 GX_FORCE_INLINE f32 getDeterminant(void) const;
269 GX_FORCE_INLINE GxMatrix33 getInverse(void) const;
271 GX_FORCE_INLINE GxMatrix33 getTranspose(void) const;
272
274 static GX_FORCE_INLINE const GxMatrix33& getMulScalar(GxMatrix33& dst, const GxMatrix33& matrix, f32 scalar);
276 static GX_FORCE_INLINE const GxMatrix33& getDivScalar(GxMatrix33& dst, const GxMatrix33& matrix, f32 scalar);
278 static GX_FORCE_INLINE const GxMatrix33& getAddMatrix(GxMatrix33& dst, const GxMatrix33& matrix0, const GxMatrix33& matrix1);
280 static GX_FORCE_INLINE const GxMatrix33& getMulMatrix(GxMatrix33& dst, const GxMatrix33& matrix0, const GxMatrix33& matrix1);
282 static GX_FORCE_INLINE const GxMatrix33& getInverse(GxMatrix33& dst, const GxMatrix33& matrix);
284 static GX_FORCE_INLINE const GxMatrix33& getTranspose(GxMatrix33& dst, const GxMatrix33& matrix);
285
287 //-------------------------------------------------------------
289 //-------------------------------------------------------------
291
293 GX_FORCE_INLINE const GxMatrix33& mulScalar(f32 scalar);
295 GX_FORCE_INLINE const GxMatrix33& divScalar(f32 scalar);
297 GX_FORCE_INLINE const GxMatrix33& addMatrix(const GxMatrix33& matrix);
299 GX_FORCE_INLINE const GxMatrix33& mulMatrix(const GxMatrix33& matrix);
301 GX_FORCE_INLINE const GxMatrix33& mulRotate(f32 radian);
303 GX_FORCE_INLINE const GxMatrix33& mulTranslate(const GxVector2& vector);
305 GX_FORCE_INLINE const GxMatrix33& mulTranslate(f32 x, f32 y);
307 GX_FORCE_INLINE const GxMatrix33& mulScale(const GxVector2& vector);
309 GX_FORCE_INLINE const GxMatrix33& mulScale(f32 x, f32 y);
311 GX_FORCE_INLINE const GxMatrix33& inverse(void);
313 GX_FORCE_INLINE const GxMatrix33& transpose(void);
314
316 //-------------------------------------------------------------
318 //-------------------------------------------------------------
320
321 f32 _m[3][4];
322
324} GX_ALIGN16_END;
325
326//===========================================================================
328//===========================================================================
329GX_ALIGN16_BEGIN struct GxMatrixAffine : public GxStructBase
330{
331 //-------------------------------------------------------------
333 //-------------------------------------------------------------
335public:
336 GX_RTTI_STRUCT(GxMatrixAffine)
337
338
339 static const GxMatrixAffine ZERO;
342
343 friend struct GxMatrix44;
344 friend struct GxMatrixAffineGpu;
345
347 //-------------------------------------------------------------
349 //-------------------------------------------------------------
351
355 GX_INLINE GxMatrixAffine(INIT initType);
357 GX_INLINE GxMatrixAffine(const GxQuaternion& quaternion, const GxVector3& position);
359 GX_INLINE GxMatrixAffine(const GxQuaternion& quaternion);
361 GX_INLINE GxMatrixAffine(const GxVector3& position);
363 GX_INLINE GxMatrixAffine( f32 m00, f32 m01, f32 m02,
364 f32 m10, f32 m11, f32 m12,
365 f32 m20, f32 m21, f32 m22,
366 f32 m30, f32 m31, f32 m32);
368 GX_INLINE GxMatrixAffine(const GxMatrix44& matrix);
370 GX_INLINE GxMatrixAffine(const GxVector3& position, const GxMatrix33& orientation);
372 GX_INLINE GxMatrixAffine(const GxMatrixAffine& matrix);
374 GX_FORCE_INLINE void initialize(const GxQuaternion& quaternion, const GxVector3& position);
375
377 //-------------------------------------------------------------
379 //-------------------------------------------------------------
381
383 GX_FORCE_INLINE GxMatrixAffine& operator = (const GxMatrixAffine& matrix);
385 GX_FORCE_INLINE GxMatrixAffine& operator *= (f32 scalar);
387 GX_FORCE_INLINE GxMatrixAffine& operator /= (f32 scalar);
389 GX_FORCE_INLINE GxMatrixAffine& operator += (const GxMatrixAffine& matrix);
391 GX_FORCE_INLINE GxMatrixAffine& operator *= (const GxMatrixAffine& matrix);
393 friend GX_FORCE_INLINE const GxMatrixAffine operator * (const GxMatrixAffine& matrix, f32 scalar);
395 friend GX_FORCE_INLINE const GxMatrixAffine operator / (const GxMatrixAffine& matrix, f32 scalar);
397 friend GX_FORCE_INLINE const GxMatrixAffine operator + (const GxMatrixAffine& matrix0, const GxMatrixAffine& matrix1);
399 friend GX_FORCE_INLINE const GxMatrixAffine operator * (const GxMatrixAffine& matrix0, const GxMatrixAffine& matrix1);
401 GX_FORCE_INLINE b32 operator == (const GxMatrixAffine& matrix);
403 GX_FORCE_INLINE b32 operator != (const GxMatrixAffine& matrix);
404
406 //-------------------------------------------------------------
408 //-------------------------------------------------------------
410
412 GX_FORCE_INLINE void setIdentity(void);
414 GX_FORCE_INLINE void setRotateX(f32 sinValue, f32 cosValue);
416 GX_FORCE_INLINE void setRotateX(f32 radian) { setRotateX(sinf(radian), cosf(radian)); }
418 GX_FORCE_INLINE void setRotateY(f32 sinValue, f32 cosValue);
420 GX_FORCE_INLINE void setRotateY(f32 radian) { setRotateY(sinf(radian), cosf(radian)); }
422 GX_FORCE_INLINE void setRotateZ(f32 sinValue, f32 cosValue);
424 GX_FORCE_INLINE void setRotateZ(f32 radian) { setRotateZ(sinf(radian), cosf(radian)); }
426 GX_FORCE_INLINE GxVector3 getRotateXYZ(void) const;
428 GX_FORCE_INLINE void setRotateXYZ(f32 x, f32 y, f32 z) { setRotateX(x); mulRotateY(y); mulRotateZ(z); }
430 GX_FORCE_INLINE GxVector3 getRotateXZY(void) const;
432 GX_FORCE_INLINE void setRotateXZY(f32 x, f32 y, f32 z) { setRotateX(x); mulRotateZ(z); mulRotateY(y); }
434 GX_FORCE_INLINE GxVector3 getRotateYXZ(void) const;
436 GX_FORCE_INLINE void setRotateYXZ(f32 x, f32 y, f32 z) { setRotateY(y); mulRotateX(x); mulRotateZ(z); }
438 GX_FORCE_INLINE GxVector3 getRotateYZX(void) const;
440 GX_FORCE_INLINE void setRotateYZX(f32 x, f32 y, f32 z) { setRotateY(y); mulRotateZ(z); mulRotateX(x); }
442 GX_FORCE_INLINE GxVector3 getRotateZXY(void) const;
444 GX_FORCE_INLINE void setRotateZXY(f32 x, f32 y, f32 z) { setRotateZ(z); mulRotateX(x); mulRotateY(y); }
446 GX_FORCE_INLINE GxVector3 getRotateZYX(void) const;
448 GX_FORCE_INLINE void setRotateZYX(f32 x, f32 y, f32 z) { setRotateZ(z); mulRotateY(y); mulRotateX(x); }
450 GX_FORCE_INLINE void setTranslate(const GxVector3& vector);
452 GX_FORCE_INLINE void setTranslate(f32 x, f32 y, f32 z);
454 GX_FORCE_INLINE const GxVector3& getPosition(void) const { return *reinterpret_cast<const GxVector3*>(&_m[3][0]); }
456 GX_FORCE_INLINE const GxVector3& getXAxis(void) const { return *reinterpret_cast<const GxVector3*>(&_m[0][0]); }
458 GX_FORCE_INLINE const GxVector3& getYAxis(void) const { return *reinterpret_cast<const GxVector3*>(&_m[1][0]); }
460 GX_FORCE_INLINE const GxVector3& getZAxis(void) const { return *reinterpret_cast<const GxVector3*>(&_m[2][0]); }
461
462
464 GX_FORCE_INLINE void setPosition(const GxVector3& position);
466 GX_FORCE_INLINE void setPosition(f32 x, f32 y, f32 z);
468 GX_FORCE_INLINE GxVector3 getScale(void) const;
470 GX_FORCE_INLINE void setScale(const GxVector3& vector);
472 GX_FORCE_INLINE void setScale(f32 x, f32 y, f32 z);
474 GX_FORCE_INLINE void setRotateAxis(const GxVector3& vector, f32 radian);
476 GX_FORCE_INLINE void setRotate(const GxQuaternion& quaternion);
478 GX_FORCE_INLINE const GxVector4& getRow(u32 row) const;
480 GX_FORCE_INLINE const f32* getRowPtr(u32 row) const;
482 GX_FORCE_INLINE void setRow(u32 row, const GxVector4& vector);
484 GX_FORCE_INLINE void setRow(u32 row, const GxVector3& vector);
486 GX_FORCE_INLINE GxVector4 getColumn(u32 column) const;
488 GX_FORCE_INLINE void setColumn(u32 column, const GxVector4& vector);
490 GX_FORCE_INLINE f32 getValue(u32 row, u32 column) const;
492 GX_FORCE_INLINE void setValue(u32 row, u32 column, f32 value);
494 GX_FORCE_INLINE f32& getReference(u32 row, u32 column);
496 GX_FORCE_INLINE const f32& getReference(u32 row, u32 column) const;
498 void setLookAtRH(const GxVector3& eyePosition, const GxVector3& atPosition, const GxVector3& up);
500 void setLookAtLH(const GxVector3& eyePosition, const GxVector3& atPosition, const GxVector3& up);
502 GX_FORCE_INLINE f32 getDeterminant(void) const;
504 GX_FORCE_INLINE GxMatrixAffine getInverse(void) const;
506 GX_FORCE_INLINE GxMatrixAffine getTranspose(void) const;
508 GX_FORCE_INLINE GxMatrixAffine getNormalizeAxes(void) const;
510 static GxMatrixAffine getMatrix(AXIS axis0, const GxVector3& vector0, AXIS axis1, const GxVector3& vector1);
511
513 static GX_FORCE_INLINE const GxMatrixAffine& getMulScalar(GxMatrixAffine& dst, const GxMatrixAffine& matrix, f32 scalar);
515 static GX_FORCE_INLINE const GxMatrixAffine& getDivScalar(GxMatrixAffine& dst, const GxMatrixAffine& matrix, f32 scalar);
517 static GX_FORCE_INLINE const GxMatrixAffine& getAddMatrix(GxMatrixAffine& dst, const GxMatrixAffine& matrix0, const GxMatrixAffine& matrix1);
519 static GX_FORCE_INLINE const GxMatrixAffine& getMulMatrix(GxMatrixAffine& dst, const GxMatrixAffine& matrix0, const GxMatrixAffine& matrix1);
521 static GX_FORCE_INLINE const GxMatrixAffineGpu& getMulMatrix(GxMatrixAffineGpu& dst, const GxMatrixAffine& matrix0, const GxMatrixAffine& matrix1);
523 static GX_FORCE_INLINE const GxMatrixAffine& getInverse(GxMatrixAffine& dst, const GxMatrixAffine& matrix);
525 static GX_FORCE_INLINE const GxMatrixAffine& getTranspose(GxMatrixAffine& dst, const GxMatrixAffine& matrix);
527 static GX_FORCE_INLINE void getFastMulMatrix(GxMatrixAffine& dst, const GxMatrixAffine& matrix0, const GxMatrixAffine& matrix1);
529 static GX_FORCE_INLINE b32 isSimdAlignment(const GxMatrixAffine& matrix);
530
532 //-------------------------------------------------------------
534 //-------------------------------------------------------------
536
538 GX_FORCE_INLINE const GxMatrixAffine& mulScalar(f32 scalar);
540 GX_FORCE_INLINE const GxMatrixAffine& divScalar(f32 scalar);
542 GX_FORCE_INLINE const GxMatrixAffine& addMatrix(const GxMatrixAffine& matrix);
544 GX_FORCE_INLINE const GxMatrixAffine& mulMatrix(const GxMatrixAffine& matrix);
546 GX_FORCE_INLINE const GxMatrixAffine& mulRotateX(f32 radian);
548 GX_FORCE_INLINE const GxMatrixAffine& mulRotateY(f32 radian);
550 GX_FORCE_INLINE const GxMatrixAffine& mulRotateZ(f32 radian);
552 GX_FORCE_INLINE const GxMatrixAffine& mulQuaternionFront(const GxQuaternion& quaternion);
554 GX_FORCE_INLINE const GxMatrixAffine& mulQuaternionBack(const GxQuaternion& quaternion);
556 GX_FORCE_INLINE void setScaleQuaternion( const GxVector3 &scale, const GxQuaternion& quaternion );
558 GX_FORCE_INLINE const GxMatrixAffine& mulTranslate(const GxVector3& vector);
560 GX_FORCE_INLINE const GxMatrixAffine& mulTranslate(f32 x, f32 y, f32 z);
562 GX_FORCE_INLINE const GxMatrixAffine& mulScale(const GxVector3& vector);
564 GX_FORCE_INLINE const GxMatrixAffine& mulScale(f32 x, f32 y, f32 z);
566 GX_FORCE_INLINE const GxMatrixAffine& inverse(void);
568 GX_FORCE_INLINE const GxMatrixAffine& transpose(void);
570 GX_FORCE_INLINE void setZero(void);
571
572#if GX_DEVELOP
573 // 書き込み
574 b32 write(GxStreamWriter& writer);
575#endif //GX_DEVELOP
577 //-------------------------------------------------------------
579 //-------------------------------------------------------------
581public:
582
583#if defined(GX_USE_SSE2)
584 union
585 {
586 struct
587 {
588 f32 _m11, _m12, _m13, _m14;
589 f32 _m21, _m22, _m23, _m24;
590 f32 _m31, _m32, _m33, _m34;
591 f32 _m41, _m42, _m43, _m44;
592 };
593 f32 _m[4][4];
594 __m128 _r[4];
595 };
596#else //GX_USE_SSE2
597 f32 _m[4][4];
598#endif // !GX_USE_SSE2
599
601} GX_ALIGN16_END;
602
603//===========================================================================
605//===========================================================================
606GX_ALIGN16_BEGIN struct GxMatrix44 : public GxStructBase
607{
608 //-------------------------------------------------------------
610 //-------------------------------------------------------------
612public:
613 GX_RTTI_STRUCT(GxMatrix44)
614
615
616 static const GxMatrix44 ZERO;
618 static const GxMatrix44 IDENTITY;
619
620 friend struct GxMatrixAffine;
621 friend struct GxMatrix44Gpu;
622
624 //-------------------------------------------------------------
626 //-------------------------------------------------------------
628
630 GxMatrix44(void) {}
632 GX_INLINE GxMatrix44(INIT initType);
634 GX_INLINE GxMatrix44(const GxQuaternion& quaternion, const GxVector3& position);
636 GX_INLINE GxMatrix44(const GxQuaternion& quaternion);
638 GX_INLINE GxMatrix44(const GxVector3& position);
640 GX_INLINE GxMatrix44(f32 m00, f32 m01, f32 m02, f32 m03,
641 f32 m10, f32 m11, f32 m12, f32 m13,
642 f32 m20, f32 m21, f32 m22, f32 m23,
643 f32 m30, f32 m31, f32 m32, f32 m33);
645 GX_INLINE GxMatrix44(const GxMatrixAffine& matrix);
647 GX_INLINE GxMatrix44(const GxMatrix44& matrix);
649 GX_FORCE_INLINE void initialize(const GxQuaternion& quaternion, const GxVector3& position);
650
652 //-------------------------------------------------------------
654 //-------------------------------------------------------------
656
658 GX_FORCE_INLINE GxMatrix44& operator = (const GxMatrix44& matrix);
660 GX_FORCE_INLINE GxMatrix44& operator *= (f32 scalar);
662 GX_FORCE_INLINE GxMatrix44& operator /= (f32 scalar);
664 GX_FORCE_INLINE GxMatrix44& operator += (const GxMatrix44& matrix);
666 GX_FORCE_INLINE GxMatrix44& operator *= (const GxMatrix44& matrix);
668 friend GX_FORCE_INLINE const GxMatrix44 operator * (const GxMatrix44& matrix, f32 scalar);
670 friend GX_FORCE_INLINE const GxMatrix44 operator / (const GxMatrix44& matrix, f32 scalar);
672 friend GX_FORCE_INLINE const GxMatrix44 operator + (const GxMatrix44& matrix0, const GxMatrix44& matrix1);
674 friend GX_FORCE_INLINE const GxMatrix44 operator * (const GxMatrix44& matrix0, const GxMatrix44& matrix1);
676 GX_FORCE_INLINE b32 operator == (const GxMatrix44& matrix);
678 GX_FORCE_INLINE b32 operator != (const GxMatrix44& matrix);
679
681 //-------------------------------------------------------------
683 //-------------------------------------------------------------
685
687 GX_FORCE_INLINE void setIdentity(void);
689 GX_FORCE_INLINE void setRotateX(f32 sinValue, f32 cosValue);
691 GX_FORCE_INLINE void setRotateX(f32 radian) { setRotateX(sinf(radian), cosf(radian)); }
693 GX_FORCE_INLINE void setRotateY(f32 sinValue, f32 cosValue);
695 GX_FORCE_INLINE void setRotateY(f32 radian) { setRotateY(sinf(radian), cosf(radian)); }
697 GX_FORCE_INLINE void setRotateZ(f32 sinValue, f32 cosValue);
699 GX_FORCE_INLINE void setRotateZ(f32 radian) { setRotateZ(sinf(radian), cosf(radian)); }
701 GX_FORCE_INLINE GxVector3 getRotateXYZ(void) const;
703 GX_FORCE_INLINE void setRotateXYZ(f32 x, f32 y, f32 z) { setRotateX(x); mulRotateY(y); mulRotateZ(z); }
705 GX_FORCE_INLINE GxVector3 getRotateXZY(void) const;
707 GX_FORCE_INLINE void setRotateXZY(f32 x, f32 y, f32 z) { setRotateX(x); mulRotateZ(z); mulRotateY(y); }
709 GX_FORCE_INLINE GxVector3 getRotateYXZ(void) const;
711 GX_FORCE_INLINE void setRotateYXZ(f32 x, f32 y, f32 z) { setRotateY(y); mulRotateX(x); mulRotateZ(z); }
713 GX_FORCE_INLINE GxVector3 getRotateYZX(void) const;
715 GX_FORCE_INLINE void setRotateYZX(f32 x, f32 y, f32 z) { setRotateY(y); mulRotateZ(z); mulRotateX(x); }
717 GX_FORCE_INLINE GxVector3 getRotateZXY(void) const;
719 GX_FORCE_INLINE void setRotateZXY(f32 x, f32 y, f32 z) { setRotateZ(z); mulRotateX(x); mulRotateY(y); }
721 GX_FORCE_INLINE GxVector3 getRotateZYX(void) const;
723 GX_FORCE_INLINE void setRotateZYX(f32 x, f32 y, f32 z) { setRotateZ(z); mulRotateY(y); mulRotateX(x); }
725 GX_FORCE_INLINE void setTranslate(const GxVector3& vector);
727 GX_FORCE_INLINE void setTranslate(f32 x, f32 y, f32 z);
729 GX_FORCE_INLINE const GxVector3& getPosition(void) const { return *reinterpret_cast<const GxVector3*>(&_m[3][0]); }
731 GX_FORCE_INLINE void setPosition(const GxVector3& position);
733 GX_FORCE_INLINE void setPosition(f32 x, f32 y, f32 z);
735 GX_FORCE_INLINE void setScale(const GxVector3& vector);
737 GX_FORCE_INLINE void setScale(f32 x, f32 y, f32 z);
739 GX_FORCE_INLINE void setRotateAxis(const GxVector3& vector, f32 radian);
741 GX_FORCE_INLINE void setRotate(const GxQuaternion& quaternion);
743 GX_FORCE_INLINE const GxVector4& getRow(u32 row) const;
745 GX_FORCE_INLINE void setRow(u32 row, const GxVector4& vector);
747 GX_FORCE_INLINE GxVector4 getColumn(u32 column) const;
749 GX_FORCE_INLINE void setColumn(u32 column, const GxVector4& vector);
751 GX_FORCE_INLINE f32 getValue(u32 row, u32 column) const;
753 GX_FORCE_INLINE void setValue(u32 row, u32 column, f32 value);
755 GX_FORCE_INLINE f32& getReference(u32 row, u32 column);
757 GX_FORCE_INLINE const f32& getReference(u32 row, u32 column) const;
759 void setLookAtRH(const GxVector3& eyePosition,const GxVector3& atPosition,const GxVector3& up);
761 void setLookAtLH(const GxVector3& eyePosition,const GxVector3& atPosition,const GxVector3& up);
763 void setPerspectiveFovRH(f32 nearZ, f32 farZ, f32 fov, f32 aspect);
765 void setPerspectiveFovRH(f32 nearZ, f32 farZ, f32 fov, f32 aspect, const GxVector2& pixelOffset, const GxSize& viewportSize);
767 void setPerspectiveFovLH(f32 nearZ, f32 farZ, f32 fov, f32 aspect);
769 void setFrustumRH(f32 left, f32 right, f32 top, f32 bottom, f32 nearZ, f32 farZ);
771 void setFrustumLH(f32 left, f32 right, f32 top, f32 bottom, f32 nearZ, f32 farZ);
773 void setOrthoRH(f32 left, f32 right, f32 top, f32 bottom, f32 nearZ, f32 farZ);
775 void setOrthoRH(f32 left, f32 right, f32 top, f32 bottom, f32 nearZ, f32 farZ, const GxVector2& pixelOffset, const GxSize& viewportSize);
777 void setOrthoLH(f32 left, f32 right, f32 top, f32 bottom, f32 nearZ, f32 farZ);
779 void setOrthoLH(f32 left, f32 right, f32 top, f32 bottom, f32 nearZ, f32 farZ, const GxVector2& pixelOffset, const GxSize& viewportSize);
781 GX_FORCE_INLINE f32 getDeterminant(void) const;
783 GX_FORCE_INLINE GxMatrix44 getInverse(void) const;
785 GX_FORCE_INLINE GxMatrix44 getTranspose(void) const;
787 GX_FORCE_INLINE GxMatrix44 getNormalizeAxes(void) const;
789 static GxMatrix44 getMatrix(AXIS axis0, const GxVector3& vector0, AXIS axis1, const GxVector3& vector1);
790
792 static GX_FORCE_INLINE const GxMatrix44& getMulScalar(GxMatrix44& dst, const GxMatrix44& matrix, f32 scalar);
794 static GX_FORCE_INLINE const GxMatrix44& getDivScalar(GxMatrix44& dst, const GxMatrix44& matrix, f32 scalar);
796 static GX_FORCE_INLINE const GxMatrix44& getAddMatrix(GxMatrix44& dst, const GxMatrix44& matrix0, const GxMatrix44& matrix1);
798 static GX_FORCE_INLINE const GxMatrix44& getMulMatrix(GxMatrix44& dst, const GxMatrix44& matrix0, const GxMatrix44& matrix1);
800 static GX_FORCE_INLINE const GxMatrix44& getInverse(GxMatrix44& dst, const GxMatrix44& matrix);
802 static GX_FORCE_INLINE const GxMatrix44& getTranspose(GxMatrix44& dst, const GxMatrix44& matrix);
803
805 //-------------------------------------------------------------
807 //-------------------------------------------------------------
809
811 GX_FORCE_INLINE const GxMatrix44& mulScalar(f32 scalar);
813 GX_FORCE_INLINE const GxMatrix44& divScalar(f32 scalar);
815 GX_FORCE_INLINE const GxMatrix44& addMatrix(const GxMatrix44& matrix);
817 GX_FORCE_INLINE const GxMatrix44& mulMatrix(const GxMatrix44& matrix);
819 GX_FORCE_INLINE const GxMatrix44& mulRotateX(f32 radian);
821 GX_FORCE_INLINE const GxMatrix44& mulRotateY(f32 radian);
823 GX_FORCE_INLINE const GxMatrix44& mulRotateZ(f32 radian);
825 GX_FORCE_INLINE const GxMatrix44& mulQuaternionFront(const GxQuaternion& quaternion);
827 GX_FORCE_INLINE const GxMatrix44& mulQuaternionBack(const GxQuaternion& quaternion);
829 GX_FORCE_INLINE const GxMatrix44& mulTranslate(const GxVector3& vector);
831 GX_FORCE_INLINE const GxMatrix44& mulTranslate(f32 x, f32 y, f32 z);
833 GX_FORCE_INLINE const GxMatrix44& mulScale(const GxVector3& vector);
835 GX_FORCE_INLINE const GxMatrix44& mulScale(f32 x, f32 y, f32 z);
837 GX_FORCE_INLINE const GxMatrix44& inverse(void);
839 GX_FORCE_INLINE const GxMatrix44& transpose(void);
841 GX_FORCE_INLINE void setZero(void);
842
844 //-------------------------------------------------------------
846 //-------------------------------------------------------------
848
849public:
850#if defined(GX_USE_SSE2)
851 union
852 {
853 struct
854 {
855 f32 _m11, _m12, _m13, _m14;
856 f32 _m21, _m22, _m23, _m24;
857 f32 _m31, _m32, _m33, _m34;
858 f32 _m41, _m42, _m43, _m44;
859 };
860 f32 _m[4][4];
861 __m128 _r[4];
862 };
863#else //GX_USE_SSE2
864 f32 _m[4][4];
865#endif // !GX_USE_SSE2
866
868} GX_ALIGN16_END;
869
870//===========================================================================
872//===========================================================================
873GX_ALIGN16_BEGIN struct GxMatrixAffineGpu
874{
875 //-------------------------------------------------------------
877 //-------------------------------------------------------------
879
880 friend struct GxMatrixAffine;
881
883 //-------------------------------------------------------------
885 //-------------------------------------------------------------
887
891 GX_INLINE GxMatrixAffineGpu(const GxMatrixAffine& matrix);
893 GX_INLINE GxMatrixAffineGpu(f32 m00, f32 m01, f32 m02, f32 m03,
894 f32 m10, f32 m11, f32 m12, f32 m13,
895 f32 m20, f32 m21, f32 m22, f32 m23);
897 GX_INLINE GxMatrixAffineGpu(const GxMatrixAffineGpu& matrix);
898
900 //-------------------------------------------------------------
902 //-------------------------------------------------------------
904
905public:
906 f32 _m[3][4];
907
909} GX_ALIGN16_END;
910
911//===========================================================================
913//===========================================================================
914GX_ALIGN16_BEGIN struct GxMatrix44Gpu
915{
916 //-------------------------------------------------------------
918 //-------------------------------------------------------------
920
924 GX_INLINE GxMatrix44Gpu(const GxMatrix44& matrix);
926 GX_INLINE GxMatrix44Gpu(f32 m00, f32 m01, f32 m02, f32 m03,
927 f32 m10, f32 m11, f32 m12, f32 m13,
928 f32 m20, f32 m21, f32 m22, f32 m23,
929 f32 m30, f32 m31, f32 m32, f32 m33);
931 GX_INLINE GxMatrix44Gpu(const GxMatrix44Gpu& matrix);
932
934 //-------------------------------------------------------------
936 //-------------------------------------------------------------
938
939private:
940 f32 _m[4][4];
941
943} GX_ALIGN16_END;
944
945GX_CORE_NAMESPACE_END()
INIT
初期化タイプ
Definition GxMath.h:53
AXIS
軸方向
Definition GxMath.h:37
ストリーム書き込みクラス
Definition GxStreamWriter.h:19
色(HDR)
Definition GxColor.h:241
2次元浮動小数点数クラス
Definition GxStruct.h:22
3次元浮動小数点数クラス
Definition GxStruct.h:91
4次元浮動小数点数クラス
Definition GxStruct.h:153
2×2行列(行優先)
Definition GxMatrix.h:37
friend GX_FORCE_INLINE const GxMatrix22 operator+(const GxMatrix22 &matrix0, const GxMatrix22 &matrix1)
行列加算
Definition GxMatrix.inl:139
GX_FORCE_INLINE b32 operator!=(const GxMatrix22 &matrix)
不一致
Definition GxMatrix.inl:173
static GX_FORCE_INLINE const GxMatrix22 & getMulScalar(GxMatrix22 &dst, const GxMatrix22 &matrix, f32 scalar)
スカラ乗算を取得
Definition GxMatrix.inl:327
static GX_FORCE_INLINE const GxMatrix22 & getDivScalar(GxMatrix22 &dst, const GxMatrix22 &matrix, f32 scalar)
スカラ除算を取得
Definition GxMatrix.inl:345
GX_FORCE_INLINE const GxMatrix22 & addMatrix(const GxMatrix22 &matrix)
行列加算
Definition GxMatrix.inl:488
GX_FORCE_INLINE const GxMatrix22 & mulScalar(f32 scalar)
スカラ乗算
Definition GxMatrix.inl:454
GxMatrix22(void)
コンストラクタ
Definition GxMatrix.h:57
GX_FORCE_INLINE f32 getDeterminant(void) const
行列式の値を取得
Definition GxMatrix.inl:295
GX_FORCE_INLINE GxMatrix22 getTranspose(void) const
転置行列を取得
Definition GxMatrix.inl:314
GX_FORCE_INLINE GxVector2 getColumn(u32 column) const
列を取得
Definition GxMatrix.inl:219
static const GxMatrix22 ZERO
0行列
Definition GxMatrix.h:46
GX_FORCE_INLINE b32 operator==(const GxMatrix22 &matrix)
一致
Definition GxMatrix.inl:162
GX_FORCE_INLINE const GxMatrix22 & divScalar(f32 scalar)
スカラ除算
Definition GxMatrix.inl:470
GX_FORCE_INLINE GxMatrix22 & operator*=(f32 scalar)
スカラ乗算代入
Definition GxMatrix.inl:66
static GX_FORCE_INLINE const GxMatrix22 & getMulMatrix(GxMatrix22 &dst, const GxMatrix22 &matrix0, const GxMatrix22 &matrix1)
行列乗算を取得
Definition GxMatrix.inl:383
f32 _m[2][4]
Definition GxMatrix.h:160
GX_FORCE_INLINE GxMatrix22 & operator+=(const GxMatrix22 &matrix)
行列加算代入
Definition GxMatrix.inl:90
GX_FORCE_INLINE const GxMatrix22 & mulMatrix(const GxMatrix22 &matrix)
行列乗算
Definition GxMatrix.inl:504
GX_FORCE_INLINE GxMatrix22 & operator/=(f32 scalar)
スカラ除算代入
Definition GxMatrix.inl:78
GX_FORCE_INLINE void setValue(u32 row, u32 column, f32 value)
値を設定
Definition GxMatrix.inl:258
GX_FORCE_INLINE const GxMatrix22 & transpose(void)
転置する
Definition GxMatrix.inl:548
GX_FORCE_INLINE void setColumn(u32 column, const GxVector2 &vector)
列を設定
Definition GxMatrix.inl:231
GX_FORCE_INLINE GxMatrix22 & operator=(const GxMatrix22 &matrix)
代入
Definition GxMatrix.inl:50
GX_FORCE_INLINE const GxVector2 & getRow(u32 row) const
行を取得
Definition GxMatrix.inl:195
friend GX_FORCE_INLINE const GxMatrix22 operator/(const GxMatrix22 &matrix, f32 scalar)
スカラ除算
Definition GxMatrix.inl:127
GX_FORCE_INLINE f32 getValue(u32 row, u32 column) const
値を取得
Definition GxMatrix.inl:244
GX_FORCE_INLINE GxMatrix22 getInverse(void) const
逆行列を取得
Definition GxMatrix.inl:304
friend GX_FORCE_INLINE const GxMatrix22 operator*(const GxMatrix22 &matrix, f32 scalar)
スカラ乗算
Definition GxMatrix.inl:115
static GX_FORCE_INLINE const GxMatrix22 & getAddMatrix(GxMatrix22 &dst, const GxMatrix22 &matrix0, const GxMatrix22 &matrix1)
行列加算を取得
Definition GxMatrix.inl:365
static const GxMatrix22 IDENTITY
単位行列
Definition GxMatrix.h:48
GX_FORCE_INLINE const GxMatrix22 & inverse(void)
逆行列にする
Definition GxMatrix.inl:525
GX_FORCE_INLINE f32 & getReference(u32 row, u32 column)
参照を取得
Definition GxMatrix.inl:271
GX_FORCE_INLINE void setRow(u32 row, const GxVector2 &vector)
行を設定
Definition GxMatrix.inl:207
GX_FORCE_INLINE void setIdentity(void)
単位行列に設定
Definition GxMatrix.inl:181
3×3行列(行優先)
Definition GxMatrix.h:169
GX_FORCE_INLINE const GxMatrix33 & mulScalar(f32 scalar)
スカラ乗算
Definition GxMatrix.inl:1201
GX_FORCE_INLINE void setRow(u32 row, const GxVector3 &vector)
行を設定
Definition GxMatrix.inl:895
GX_FORCE_INLINE f32 & getReference(u32 row, u32 column)
参照を取得
Definition GxMatrix.inl:960
static GX_FORCE_INLINE const GxMatrix33 & getMulMatrix(GxMatrix33 &dst, const GxMatrix33 &matrix0, const GxMatrix33 &matrix1)
行列乗算を取得
Definition GxMatrix.inl:1093
GX_FORCE_INLINE GxMatrix33 & operator=(const GxMatrix33 &matrix)
代入
Definition GxMatrix.inl:592
GX_FORCE_INLINE const GxMatrix33 & mulRotate(f32 radian)
回転乗算
Definition GxMatrix.inl:1303
GX_FORCE_INLINE GxMatrix33 & operator+=(const GxMatrix33 &matrix)
行列加算代入
Definition GxMatrix.inl:638
friend GX_FORCE_INLINE const GxMatrix33 operator+(const GxMatrix33 &matrix0, const GxMatrix44 &matrix1)
行列加算
friend GX_FORCE_INLINE const GxMatrix33 operator*(const GxMatrix33 &matrix, f32 scalar)
スカラ乗算
Definition GxMatrix.inl:663
GX_FORCE_INLINE void setTranslate(const GxVector2 &vector)
平行移動行列を設定
Definition GxMatrix.inl:779
GX_FORCE_INLINE void setRotate(f32 radian)
回転行列を設定
Definition GxMatrix.h:235
GX_FORCE_INLINE GxVector3 getColumn(u32 column) const
列を取得
Definition GxMatrix.inl:908
static GX_FORCE_INLINE const GxMatrix33 & getMulScalar(GxMatrix33 &dst, const GxMatrix33 &matrix, f32 scalar)
スカラ乗算を取得
Definition GxMatrix.inl:1019
friend GX_FORCE_INLINE const GxMatrix33 operator/(const GxMatrix33 &matrix, f32 scalar)
スカラ除算
Definition GxMatrix.inl:677
GX_FORCE_INLINE const GxVector3 & getRow(u32 row) const
行を取得
Definition GxMatrix.inl:884
GX_FORCE_INLINE const GxMatrix33 & mulTranslate(const GxVector2 &vector)
平行移動乗算
Definition GxMatrix.inl:1317
GX_FORCE_INLINE GxMatrix33 & operator*=(f32 scalar)
スカラ乗算代入
Definition GxMatrix.inl:614
GX_FORCE_INLINE const GxMatrix33 & inverse(void)
逆行列にする
Definition GxMatrix.inl:1406
GX_FORCE_INLINE GxMatrix33 & operator/=(f32 scalar)
スカラ除算代入
Definition GxMatrix.inl:626
GX_FORCE_INLINE const GxVector2 & getPosition(void) const
平行移動量を取得
Definition GxMatrix.h:241
GX_FORCE_INLINE void setPosition(const GxVector2 &position)
平行移動量のみを設定
Definition GxMatrix.inl:820
f32 _m[3][4]
Definition GxMatrix.h:321
GX_FORCE_INLINE void setColumn(u32 column, const GxVector3 &vector)
列を設定
Definition GxMatrix.inl:919
GX_FORCE_INLINE GxMatrix33 getInverse(void) const
逆行列を取得
Definition GxMatrix.inl:995
GX_FORCE_INLINE void setRotate(f32 sinValue, f32 cosValue)
回転行列を設定
Definition GxMatrix.inl:759
GX_FORCE_INLINE const GxMatrix33 & divScalar(f32 scalar)
スカラ除算
Definition GxMatrix.inl:1223
GX_FORCE_INLINE b32 operator!=(const GxMatrix33 &matrix)
不一致
Definition GxMatrix.inl:730
GxMatrix33(void)
コンストラクタ
Definition GxMatrix.h:189
static const GxMatrix33 IDENTITY
単位行列
Definition GxMatrix.h:180
GX_FORCE_INLINE f32 getValue(u32 row, u32 column) const
値を取得
Definition GxMatrix.inl:933
GX_FORCE_INLINE f32 getDeterminant(void) const
行列式の値を取得
Definition GxMatrix.inl:984
GX_FORCE_INLINE void setIdentity(void)
単位行列に設定
Definition GxMatrix.inl:738
static const GxMatrix33 ZERO
0行列
Definition GxMatrix.h:178
GX_FORCE_INLINE const GxMatrix33 & addMatrix(const GxMatrix33 &matrix)
行列加算
Definition GxMatrix.inl:1247
GX_FORCE_INLINE void setValue(u32 row, u32 column, f32 value)
値を設定
Definition GxMatrix.inl:947
static GX_FORCE_INLINE const GxMatrix33 & getAddMatrix(GxMatrix33 &dst, const GxMatrix33 &matrix0, const GxMatrix33 &matrix1)
行列加算を取得
Definition GxMatrix.inl:1069
GX_FORCE_INLINE b32 operator==(const GxMatrix33 &matrix)
一致
Definition GxMatrix.inl:718
GX_FORCE_INLINE GxMatrix33 getTranspose(void) const
転置行列を取得
Definition GxMatrix.inl:1005
GX_FORCE_INLINE const GxMatrix33 & transpose(void)
転置する
Definition GxMatrix.inl:1441
static GX_FORCE_INLINE const GxMatrix33 & getDivScalar(GxMatrix33 &dst, const GxMatrix33 &matrix, f32 scalar)
スカラ除算を取得
Definition GxMatrix.inl:1043
GX_FORCE_INLINE void setScale(const GxVector2 &vector)
スケール行列を設定
Definition GxMatrix.inl:843
GX_FORCE_INLINE const GxMatrix33 & mulMatrix(const GxMatrix33 &matrix)
行列乗算
Definition GxMatrix.inl:1269
GX_FORCE_INLINE const GxMatrix33 & mulScale(const GxVector2 &vector)
スケール乗算
Definition GxMatrix.inl:1356
4×4行列(GPU用)
Definition GxMatrix.h:915
GxMatrix44Gpu(void)
デフォルトコンストラクタ
Definition GxMatrix.h:922
4×4行列(行優先)
Definition GxMatrix.h:607
GX_FORCE_INLINE void setRotateY(f32 radian)
回転行列を設定(Y軸回転)
Definition GxMatrix.h:695
GX_FORCE_INLINE void setRotateYXZ(f32 x, f32 y, f32 z)
回転行列を設定(YXZ軸回転)
Definition GxMatrix.h:711
GX_FORCE_INLINE b32 operator==(const GxMatrix44 &matrix)
一致
Definition GxMatrix.inl:3697
GX_FORCE_INLINE GxVector3 getRotateZXY(void) const
ZXY軸回転角を取得
Definition GxMatrix.inl:3961
GX_FORCE_INLINE GxMatrix44 getInverse(void) const
逆行列を取得
Definition GxMatrix.inl:4347
void setLookAtLH(const GxVector3 &eyePosition, const GxVector3 &atPosition, const GxVector3 &up)
左手座標系・視点行列を設定
Definition GxMatrix.cpp:297
static const GxMatrix44 IDENTITY
単位行列
Definition GxMatrix.h:618
GX_FORCE_INLINE const GxMatrix44 & mulTranslate(const GxVector3 &vector)
平行移動乗算
Definition GxMatrix.inl:4890
GX_FORCE_INLINE const GxVector4 & getRow(u32 row) const
行を取得
Definition GxMatrix.inl:4232
GX_FORCE_INLINE void setRotate(const GxQuaternion &quaternion)
回転行列を設定
Definition GxMatrix.inl:4204
GX_FORCE_INLINE void setRotateAxis(const GxVector3 &vector, f32 radian)
回転行列を設定
Definition GxMatrix.inl:4173
GX_FORCE_INLINE const GxMatrix44 & mulRotateY(f32 radian)
Y軸回転乗算
Definition GxMatrix.inl:4790
GX_FORCE_INLINE void initialize(const GxQuaternion &quaternion, const GxVector3 &position)
初期化
Definition GxMatrix.inl:3560
GxMatrix44(void)
デフォルトコンストラクタ(要素は初期化されない)
Definition GxMatrix.h:630
static GX_FORCE_INLINE const GxMatrix44 & getMulScalar(GxMatrix44 &dst, const GxMatrix44 &matrix, f32 scalar)
スカラ乗算を取得
Definition GxMatrix.inl:4402
GX_FORCE_INLINE const GxMatrix44 & mulQuaternionFront(const GxQuaternion &quaternion)
クォータニオンによる回転乗算(前から乗算)
Definition GxMatrix.inl:4818
GX_FORCE_INLINE const GxMatrix44 & mulMatrix(const GxMatrix44 &matrix)
行列乗算
Definition GxMatrix.inl:4765
GX_FORCE_INLINE void setRotateZ(f32 sinValue, f32 cosValue)
回転行列を設定(Z軸回転)
Definition GxMatrix.inl:3805
GX_FORCE_INLINE GxVector3 getRotateXZY(void) const
XZY軸回転角を取得
Definition GxMatrix.inl:3865
void setPerspectiveFovRH(f32 nearZ, f32 farZ, f32 fov, f32 aspect)
右手座標系・射影変換行列を設定
Definition GxMatrix.cpp:338
void setLookAtRH(const GxVector3 &eyePosition, const GxVector3 &atPosition, const GxVector3 &up)
右手座標系・視点行列を設定
Definition GxMatrix.cpp:257
static GX_FORCE_INLINE const GxMatrix44 & getDivScalar(GxMatrix44 &dst, const GxMatrix44 &matrix, f32 scalar)
スカラ除算を取得
Definition GxMatrix.inl:4434
GX_FORCE_INLINE GxMatrix44 & operator/=(f32 scalar)
スカラ除算代入
Definition GxMatrix.inl:3613
GX_FORCE_INLINE b32 operator!=(const GxMatrix44 &matrix)
不一致
Definition GxMatrix.inl:3710
void setFrustumRH(f32 left, f32 right, f32 top, f32 bottom, f32 nearZ, f32 farZ)
右手座標系・射影変換行列を設定
Definition GxMatrix.cpp:403
GX_FORCE_INLINE GxMatrix44 & operator*=(f32 scalar)
スカラ乗算代入
Definition GxMatrix.inl:3601
GX_FORCE_INLINE void setRotateZXY(f32 x, f32 y, f32 z)
回転行列を設定(ZXY軸回転)
Definition GxMatrix.h:719
GX_FORCE_INLINE void setTranslate(const GxVector3 &vector)
平行移動行列を設定
Definition GxMatrix.inl:4028
friend GX_FORCE_INLINE const GxMatrix44 operator*(const GxMatrix44 &matrix, f32 scalar)
スカラ乗算
Definition GxMatrix.inl:3650
GX_FORCE_INLINE const GxMatrix44 & mulRotateZ(f32 radian)
Z軸回転乗算
Definition GxMatrix.inl:4804
GX_FORCE_INLINE GxVector4 getColumn(u32 column) const
列を取得
Definition GxMatrix.inl:4257
GX_FORCE_INLINE const GxMatrix44 & divScalar(f32 scalar)
スカラ除算
Definition GxMatrix.inl:4703
GX_FORCE_INLINE GxVector3 getRotateYXZ(void) const
YXZ軸回転角を取得
Definition GxMatrix.inl:3897
GX_FORCE_INLINE void setZero(void)
0を設定
Definition GxMatrix.inl:5120
GX_FORCE_INLINE f32 & getReference(u32 row, u32 column)
参照を取得
Definition GxMatrix.inl:4311
GX_FORCE_INLINE GxMatrix44 getNormalizeAxes(void) const
位置以外の各軸を正規化したものを取得
Definition GxMatrix.inl:4369
friend GX_FORCE_INLINE const GxMatrix44 operator+(const GxMatrix44 &matrix0, const GxMatrix44 &matrix1)
行列加算
Definition GxMatrix.inl:3674
GX_FORCE_INLINE void setRotateZ(f32 radian)
回転行列を設定(Z軸回転)
Definition GxMatrix.h:699
GX_FORCE_INLINE GxMatrix44 getTranspose(void) const
転置行列を取得
Definition GxMatrix.inl:4357
GX_FORCE_INLINE const GxMatrix44 & inverse(void)
逆行列を計算する
Definition GxMatrix.inl:5021
GX_FORCE_INLINE GxVector3 getRotateYZX(void) const
YZX軸回転角を取得
Definition GxMatrix.inl:3929
GX_FORCE_INLINE const GxMatrix44 & mulScale(const GxVector3 &vector)
スケール乗算
Definition GxMatrix.inl:4956
GX_FORCE_INLINE void setRotateYZX(f32 x, f32 y, f32 z)
回転行列を設定(YZX軸回転)
Definition GxMatrix.h:715
friend GX_FORCE_INLINE const GxMatrix44 operator/(const GxMatrix44 &matrix, f32 scalar)
スカラ除算
Definition GxMatrix.inl:3662
GX_FORCE_INLINE void setRow(u32 row, const GxVector4 &vector)
行を設定
Definition GxMatrix.inl:4243
GX_FORCE_INLINE f32 getDeterminant(void) const
行列式の値を取得
Definition GxMatrix.inl:4335
GX_FORCE_INLINE const GxVector3 & getPosition(void) const
平行移動量を取得
Definition GxMatrix.h:729
GX_FORCE_INLINE f32 getValue(u32 row, u32 column) const
値を取得
Definition GxMatrix.inl:4284
void setFrustumLH(f32 left, f32 right, f32 top, f32 bottom, f32 nearZ, f32 farZ)
左手座標系・射影変換行列を設定
Definition GxMatrix.cpp:428
GX_FORCE_INLINE const GxMatrix44 & transpose(void)
転置する
Definition GxMatrix.inl:5072
GX_FORCE_INLINE void setColumn(u32 column, const GxVector4 &vector)
列を設定
Definition GxMatrix.inl:4269
GX_FORCE_INLINE void setIdentity(void)
単位行列に設定
Definition GxMatrix.inl:3718
f32 _m[4][4]
Definition GxMatrix.h:864
GX_FORCE_INLINE void setRotateXYZ(f32 x, f32 y, f32 z)
回転行列を設定(XYZ軸回転)
Definition GxMatrix.h:703
GX_FORCE_INLINE void setValue(u32 row, u32 column, f32 value)
値を設定
Definition GxMatrix.inl:4298
GX_FORCE_INLINE const GxMatrix44 & mulQuaternionBack(const GxQuaternion &quaternion)
クォータニオンによる回転乗算(後ろから乗算)
Definition GxMatrix.inl:4831
static GX_FORCE_INLINE const GxMatrix44 & getAddMatrix(GxMatrix44 &dst, const GxMatrix44 &matrix0, const GxMatrix44 &matrix1)
行列加算を取得
Definition GxMatrix.inl:4468
void setPerspectiveFovLH(f32 nearZ, f32 farZ, f32 fov, f32 aspect)
左手座標系・射影変換行列を設定
Definition GxMatrix.cpp:378
GX_FORCE_INLINE void setRotateY(f32 sinValue, f32 cosValue)
回転行列を設定(Y軸回転)
Definition GxMatrix.inl:3776
GX_FORCE_INLINE GxVector3 getRotateXYZ(void) const
XYZ軸回転角を取得
Definition GxMatrix.inl:3832
GX_FORCE_INLINE void setRotateZYX(f32 x, f32 y, f32 z)
回転行列を設定(ZYX軸回転)
Definition GxMatrix.h:723
void setOrthoRH(f32 left, f32 right, f32 top, f32 bottom, f32 nearZ, f32 farZ)
右手座標系・正射影変換行列を設定
Definition GxMatrix.cpp:453
GX_FORCE_INLINE GxMatrix44 & operator+=(const GxMatrix44 &matrix)
行列加算代入
Definition GxMatrix.inl:3625
GX_FORCE_INLINE const GxMatrix44 & mulScalar(f32 scalar)
スカラ乗算
Definition GxMatrix.inl:4673
GX_FORCE_INLINE void setRotateX(f32 sinValue, f32 cosValue)
回転行列を設定(X軸回転)
Definition GxMatrix.inl:3747
GX_FORCE_INLINE GxMatrix44 & operator=(const GxMatrix44 &matrix)
代入
Definition GxMatrix.inl:3571
GX_FORCE_INLINE void setScale(const GxVector3 &vector)
スケール行列を設定
Definition GxMatrix.inl:4114
static GxMatrix44 getMatrix(AXIS axis0, const GxVector3 &vector0, AXIS axis1, const GxVector3 &vector1)
2つの軸とベクトルから行列を取得
Definition GxMatrix.cpp:564
GX_FORCE_INLINE const GxMatrix44 & mulRotateX(f32 radian)
X軸回転乗算
Definition GxMatrix.inl:4776
GX_FORCE_INLINE void setRotateXZY(f32 x, f32 y, f32 z)
回転行列を設定(XZY軸回転)
Definition GxMatrix.h:707
GX_FORCE_INLINE const GxMatrix44 & addMatrix(const GxMatrix44 &matrix)
行列加算
Definition GxMatrix.inl:4735
static const GxMatrix44 ZERO
0行列
Definition GxMatrix.h:616
void setOrthoLH(f32 left, f32 right, f32 top, f32 bottom, f32 nearZ, f32 farZ)
左手座標系・正射影変換行列を設定
Definition GxMatrix.cpp:509
static GX_FORCE_INLINE const GxMatrix44 & getMulMatrix(GxMatrix44 &dst, const GxMatrix44 &matrix0, const GxMatrix44 &matrix1)
行列乗算を取得
Definition GxMatrix.inl:4500
GX_FORCE_INLINE void setRotateX(f32 radian)
回転行列を設定(X軸回転)
Definition GxMatrix.h:691
GX_FORCE_INLINE void setPosition(const GxVector3 &position)
平行移動量のみを設定
Definition GxMatrix.inl:4086
GX_FORCE_INLINE GxVector3 getRotateZYX(void) const
ZYX軸回転角を取得
Definition GxMatrix.inl:3994
アフィン変換行列(GPU用)
Definition GxMatrix.h:874
f32 _m[3][4]
Definition GxMatrix.h:906
GxMatrixAffineGpu(void)
デフォルトコンストラクタ
Definition GxMatrix.h:889
アフィン変換行列(行優先)
Definition GxMatrix.h:330
static const GxMatrixAffine ZERO
0行列
Definition GxMatrix.h:339
GX_FORCE_INLINE void setRotateZYX(f32 x, f32 y, f32 z)
回転行列を設定(ZYX軸回転)
Definition GxMatrix.h:448
GX_FORCE_INLINE const GxVector3 & getZAxis(void) const
平行移動量を取得
Definition GxMatrix.h:460
GX_FORCE_INLINE void setRotateZ(f32 radian)
回転行列を設定(Z軸回転)
Definition GxMatrix.h:424
GX_FORCE_INLINE void setRotateXYZ(f32 x, f32 y, f32 z)
回転行列を設定(XYZ軸回転)
Definition GxMatrix.h:428
GX_FORCE_INLINE void setZero(void)
0を設定
Definition GxMatrix.inl:1619
GX_FORCE_INLINE GxMatrixAffine getInverse(void) const
逆行列を取得
Definition GxMatrix.inl:2430
f32 _m[4][4]
Definition GxMatrix.h:597
GX_FORCE_INLINE const GxMatrixAffine & mulRotateY(f32 radian)
Y軸回転乗算
Definition GxMatrix.inl:3045
GX_FORCE_INLINE void setRotateZXY(f32 x, f32 y, f32 z)
回転行列を設定(ZXY軸回転)
Definition GxMatrix.h:444
static const GxMatrixAffine IDENTITY
単位行列
Definition GxMatrix.h:341
GX_FORCE_INLINE b32 operator!=(const GxMatrixAffine &matrix)
不一致
Definition GxMatrix.inl:1789
GX_FORCE_INLINE const GxVector4 & getRow(u32 row) const
行を取得
Definition GxMatrix.inl:2281
GX_FORCE_INLINE f32 getDeterminant(void) const
行列式の値を取得
Definition GxMatrix.inl:2419
GX_FORCE_INLINE const GxMatrixAffine & mulTranslate(const GxVector3 &vector)
平行移動乗算
Definition GxMatrix.inl:3270
GX_FORCE_INLINE const GxMatrixAffine & inverse(void)
逆行列にする
Definition GxMatrix.inl:3377
GX_FORCE_INLINE f32 & getReference(u32 row, u32 column)
参照を取得
Definition GxMatrix.inl:2395
friend GX_FORCE_INLINE const GxMatrixAffine operator*(const GxMatrixAffine &matrix, f32 scalar)
スカラ乗算
Definition GxMatrix.inl:1729
GX_FORCE_INLINE GxMatrixAffine & operator/=(f32 scalar)
スカラ除算代入
Definition GxMatrix.inl:1692
GX_FORCE_INLINE const GxMatrixAffine & mulQuaternionFront(const GxQuaternion &quaternion)
クォータニオンによる回転乗算(前から乗算)
Definition GxMatrix.inl:3073
GX_FORCE_INLINE GxMatrixAffine & operator*=(f32 scalar)
スカラ乗算代入
Definition GxMatrix.inl:1680
GX_FORCE_INLINE GxVector3 getRotateZXY(void) const
ZXY軸回転角を取得
Definition GxMatrix.inl:2024
GX_FORCE_INLINE void setScale(const GxVector3 &vector)
スケール行列を設定
Definition GxMatrix.inl:2179
static GX_FORCE_INLINE const GxMatrixAffine & getAddMatrix(GxMatrixAffine &dst, const GxMatrixAffine &matrix0, const GxMatrixAffine &matrix1)
行列加算を取得
Definition GxMatrix.inl:2532
GX_FORCE_INLINE const GxMatrixAffine & mulScale(const GxVector3 &vector)
スケール乗算
Definition GxMatrix.inl:3312
GX_FORCE_INLINE void setTranslate(const GxVector3 &vector)
平行移動行列を設定
Definition GxMatrix.inl:2091
GX_FORCE_INLINE void setIdentity(void)
単位行列に設定
Definition GxMatrix.inl:1797
GX_FORCE_INLINE void setRotateX(f32 radian)
回転行列を設定(X軸回転)
Definition GxMatrix.h:416
GX_FORCE_INLINE const GxMatrixAffine & transpose(void)
転置する
Definition GxMatrix.inl:3386
static GX_FORCE_INLINE const GxMatrixAffine & getMulMatrix(GxMatrixAffine &dst, const GxMatrixAffine &matrix0, const GxMatrixAffine &matrix1)
行列乗算を取得
Definition GxMatrix.inl:2560
GX_FORCE_INLINE void setRow(u32 row, const GxVector4 &vector)
行を設定
Definition GxMatrix.inl:2304
GX_FORCE_INLINE void setRotate(const GxQuaternion &quaternion)
回転行列を設定
Definition GxMatrix.inl:2257
GX_FORCE_INLINE void initialize(const GxQuaternion &quaternion, const GxVector3 &position)
初期化
Definition GxMatrix.inl:1643
GX_FORCE_INLINE GxVector3 getRotateYXZ(void) const
YXZ軸回転角を取得
Definition GxMatrix.inl:1960
GX_FORCE_INLINE void setColumn(u32 column, const GxVector4 &vector)
列を設定
Definition GxMatrix.inl:2343
GX_FORCE_INLINE void setRotateY(f32 sinValue, f32 cosValue)
回転行列を設定(Y軸回転)
Definition GxMatrix.inl:1847
GX_FORCE_INLINE const GxMatrixAffine & mulQuaternionBack(const GxQuaternion &quaternion)
クォータニオンによる回転乗算(後ろから乗算)
Definition GxMatrix.inl:3086
GX_FORCE_INLINE GxMatrixAffine & operator=(const GxMatrixAffine &matrix)
代入
Definition GxMatrix.inl:1654
GX_FORCE_INLINE const GxVector3 & getXAxis(void) const
平行移動量を取得
Definition GxMatrix.h:456
GX_FORCE_INLINE b32 operator==(const GxMatrixAffine &matrix)
一致
Definition GxMatrix.inl:1776
GX_FORCE_INLINE GxVector3 getScale(void) const
スケールを取得
Definition GxMatrix.inl:2165
GX_FORCE_INLINE const GxMatrixAffine & mulRotateX(f32 radian)
X軸回転乗算
Definition GxMatrix.inl:3031
friend GX_FORCE_INLINE const GxMatrixAffine operator+(const GxMatrixAffine &matrix0, const GxMatrixAffine &matrix1)
行列加算
Definition GxMatrix.inl:1753
GX_FORCE_INLINE GxMatrixAffine getNormalizeAxes(void) const
位置以外の各軸を正規化したものを取得
Definition GxMatrix.inl:2452
GX_FORCE_INLINE GxVector3 getRotateXZY(void) const
XZY軸回転角を取得
Definition GxMatrix.inl:1928
GX_FORCE_INLINE GxVector3 getRotateZYX(void) const
ZYX軸回転角を取得
Definition GxMatrix.inl:2057
static GX_FORCE_INLINE void getFastMulMatrix(GxMatrixAffine &dst, const GxMatrixAffine &matrix0, const GxMatrixAffine &matrix1)
高速版。dst と matrix0, matrix1 は重なってなならない。アドレスは simd 用にアライメントされななければならない。
Definition GxMatrix.inl:2644
static GX_FORCE_INLINE b32 isSimdAlignment(const GxMatrixAffine &matrix)
simd 用にアライメントされているか調べる
Definition GxMatrix.inl:2704
GX_FORCE_INLINE f32 getValue(u32 row, u32 column) const
値を取得
Definition GxMatrix.inl:2361
GX_FORCE_INLINE void setRotateZ(f32 sinValue, f32 cosValue)
回転行列を設定(Z軸回転)
Definition GxMatrix.inl:1872
GX_FORCE_INLINE GxVector3 getRotateXYZ(void) const
XYZ軸回転角を取得
Definition GxMatrix.inl:1895
void setLookAtLH(const GxVector3 &eyePosition, const GxVector3 &atPosition, const GxVector3 &up)
左手座標系・視点行列を設定
Definition GxMatrix.cpp:138
GX_FORCE_INLINE void setRotateAxis(const GxVector3 &vector, f32 radian)
回転行列を設定
Definition GxMatrix.inl:2230
GX_FORCE_INLINE GxVector3 getRotateYZX(void) const
YZX軸回転角を取得
Definition GxMatrix.inl:1992
GX_FORCE_INLINE const GxMatrixAffine & addMatrix(const GxMatrixAffine &matrix)
行列加算
Definition GxMatrix.inl:2994
GX_FORCE_INLINE const GxMatrixAffine & mulMatrix(const GxMatrixAffine &matrix)
行列乗算
Definition GxMatrix.inl:3020
GX_FORCE_INLINE const GxMatrixAffine & mulScalar(f32 scalar)
スカラ乗算
Definition GxMatrix.inl:2940
GX_FORCE_INLINE GxVector4 getColumn(u32 column) const
列を取得
Definition GxMatrix.inl:2331
GX_FORCE_INLINE void setRotateX(f32 sinValue, f32 cosValue)
回転行列を設定(X軸回転)
Definition GxMatrix.inl:1822
static GX_FORCE_INLINE const GxMatrixAffine & getMulScalar(GxMatrixAffine &dst, const GxMatrixAffine &matrix, f32 scalar)
スカラ乗算を取得
Definition GxMatrix.inl:2474
GX_FORCE_INLINE void setRotateXZY(f32 x, f32 y, f32 z)
回転行列を設定(XZY軸回転)
Definition GxMatrix.h:432
GX_FORCE_INLINE GxMatrixAffine & operator+=(const GxMatrixAffine &matrix)
行列加算代入
Definition GxMatrix.inl:1704
GX_FORCE_INLINE GxMatrixAffine getTranspose(void) const
転置行列を取得
Definition GxMatrix.inl:2440
GX_FORCE_INLINE void setRotateYZX(f32 x, f32 y, f32 z)
回転行列を設定(YZX軸回転)
Definition GxMatrix.h:440
GX_FORCE_INLINE const GxMatrixAffine & divScalar(f32 scalar)
スカラ除算
Definition GxMatrix.inl:2966
static GX_FORCE_INLINE const GxMatrixAffine & getDivScalar(GxMatrixAffine &dst, const GxMatrixAffine &matrix, f32 scalar)
スカラ除算を取得
Definition GxMatrix.inl:2502
static GxMatrixAffine getMatrix(AXIS axis0, const GxVector3 &vector0, AXIS axis1, const GxVector3 &vector1)
2つの軸とベクトルから行列を取得
Definition GxMatrix.cpp:179
GX_FORCE_INLINE const GxMatrixAffine & mulRotateZ(f32 radian)
Z軸回転乗算
Definition GxMatrix.inl:3059
GX_FORCE_INLINE const f32 * getRowPtr(u32 row) const
行を取得
Definition GxMatrix.inl:2293
GX_FORCE_INLINE const GxVector3 & getPosition(void) const
平行移動量を取得
Definition GxMatrix.h:454
GX_FORCE_INLINE void setValue(u32 row, u32 column, f32 value)
値を設定
Definition GxMatrix.inl:2379
friend GX_FORCE_INLINE const GxMatrixAffine operator/(const GxMatrixAffine &matrix, f32 scalar)
スカラ除算
Definition GxMatrix.inl:1741
GX_FORCE_INLINE const GxVector3 & getYAxis(void) const
平行移動量を取得
Definition GxMatrix.h:458
GX_FORCE_INLINE void setScaleQuaternion(const GxVector3 &scale, const GxQuaternion &quaternion)
スケール行列を設定し、クォータニオンによる回転乗算(後ろから乗算)を行う
Definition GxMatrix.inl:3205
GxMatrixAffine(void)
デフォルトコンストラクタ(要素は全て0で初期化される)
Definition GxMatrix.h:353
GX_FORCE_INLINE void setRotateY(f32 radian)
回転行列を設定(Y軸回転)
Definition GxMatrix.h:420
GX_FORCE_INLINE void setPosition(const GxVector3 &position)
平行移動量のみを設定
Definition GxMatrix.inl:2141
void setLookAtRH(const GxVector3 &eyePosition, const GxVector3 &atPosition, const GxVector3 &up)
右手座標系・視点行列を設定
Definition GxMatrix.cpp:99
GX_FORCE_INLINE void setRotateYXZ(f32 x, f32 y, f32 z)
回転行列を設定(YXZ軸回転)
Definition GxMatrix.h:436
座標
Definition GxStruct.h:867
クォータニオン
Definition GxQuaternion.h:19
矩形
Definition GxStruct.h:951
サイズ
Definition GxStruct.h:730
Definition GxBase.h:24
2次元ベクトル
Definition GxVector.h:34
3次元ベクトル
Definition GxVector.h:245
4次元ベクトル
Definition GxVector.h:582
32bitブーリアン
Definition GxDefine.h:173