Simulant
21.12-194
A portable game engine for Windows, OSX, Linux, Dreamcast, and PSP
simulant
math
mat3.h
1
#pragma once
2
3
#include <array>
4
#include <cstdint>
5
6
namespace
smlt
{
7
8
struct
Mat4;
9
struct
Degrees;
10
struct
Vec3;
11
struct
Quaternion;
12
13
struct
Mat3
{
14
private
:
15
std::array<float, 9> m;
16
17
public
:
18
static
Mat3
from_rotation_x(
const
Degrees
& angle);
19
static
Mat3
from_rotation_y(
const
Degrees
& angle);
20
static
Mat3
from_rotation_z(
const
Degrees
& angle);
21
22
Mat3
() {
23
m.fill(0);
24
m[0] = m[4] = m[8] = 1.0f;
25
}
26
27
Mat3
(
const
float
* data) {
28
for
(std::size_t i = 0; i < 9; ++i) {
29
m[i] = data[i];
30
}
31
}
32
33
Mat3
(
const
Mat4
& rhs);
34
Mat3
(
const
Quaternion
& q);
35
Mat3
(
const
Vec3
& c0,
const
Vec3
& c1,
const
Vec3
& c2);
36
37
const
float
& operator[](
const
uint32_t index)
const
{
38
return
m[index];
39
}
40
41
const
float
& operator[](
const
int
index)
const
{
42
return
m[index];
43
}
44
45
float
& operator[](
const
uint32_t index) {
46
return
m[index];
47
}
48
49
float
& operator[](
const
int
index) {
50
return
m[index];
51
}
52
53
Vec3
transform_vector(
const
Vec3
& v)
const
;
54
55
const
float
* data()
const
{
56
return
&m[0];
57
}
58
59
void
inverse();
60
61
Mat3
inversed()
const
{
62
Mat3
ret = *
this
;
63
ret.inverse();
64
return
ret;
65
}
66
67
void
transpose() {
68
std::swap(m[1], m[3]);
69
std::swap(m[2], m[6]);
70
std::swap(m[5], m[7]);
71
}
72
73
Mat3
transposed()
const
{
74
Mat3
ret = *
this
;
75
ret.transpose();
76
return
ret;
77
}
78
79
float
determinant()
const
;
80
Mat3
adjugate()
const
;
81
82
Mat3
& operator*=(
const
float
rhs) {
83
for
(std::size_t i = 0; i < 9; ++i) {
84
m[i] *= rhs;
85
}
86
87
return
*
this
;
88
}
89
90
Mat3
operator*(
const
float
rhs)
const
{
91
return
Mat3
(*
this
) *= rhs;
92
}
93
94
};
95
96
97
}
smlt::Mat4
Definition:
mat4.h:25
smlt::Vec3
Definition:
vec3.h:23
smlt::Quaternion
Definition:
quaternion.h:24
smlt::Mat3
Definition:
mat3.h:13
smlt
Definition:
animation.cpp:25
smlt::Degrees
Definition:
degrees.h:7
Generated by
1.8.20