forked from autodesk-forks/MaterialX
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmatrix33.h
165 lines (136 loc) · 2.63 KB
/
matrix33.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
// Open Shading Language : Copyright (c) 2009-2017 Sony Pictures Imageworks Inc., et al.
// https://github.com/imageworks/OpenShadingLanguage/blob/master/LICENSE
//
// MaterialX specification (c) 2017 Lucasfilm Ltd.
// http://www.materialx.org/
#pragma once
#define MATRIX33_H
struct matrix33
{
matrix m;
};
int isValidAs33(matrix m44)
{
return m44[0][3] == 0 &&
m44[1][3] == 0 &&
m44[2][3] == 0 &&
m44[3][0] == 0 &&
m44[3][1] == 0 &&
m44[3][2] == 0 &&
m44[3][3] == 1;
}
matrix matrix33To44 (matrix33 m33)
{
return m33.m;
}
// Convert an arbitrary m44 to m33 by removing the translation
//QUESTION: should we check if it's valid to represent the 4x4 as a 3x3?
matrix33 matrix44To33 (matrix m44)
{
matrix33 m33;
m33.m = m44;
m33.m[0][3] = 0;
m33.m[1][3] = 0;
m33.m[2][3] = 0;
m33.m[3][0] = 0;
m33.m[3][1] = 0;
m33.m[3][2] = 0;
m33.m[3][3] = 1;
return m33;
}
matrix33 __operator__neg__(matrix33 a)
{
matrix33 m33;
m33.m = -a.m;
return m33;
}
matrix33 __operator__mul__(int a, matrix33 b)
{
matrix33 m33;
m33.m = a * b.m;
return m33;
}
matrix33 __operator__mul__(float a, matrix33 b)
{
matrix33 m33;
m33.m = a * b.m;
return m33;
}
matrix33 __operator__mul__(matrix33 a, int b)
{
matrix33 m33;
m33.m = a.m * b;
return m33;
}
matrix33 __operator__mul__(matrix33 a, float b)
{
matrix33 m33;
m33.m = a.m * b;
return m33;
}
matrix33 __operator__mul__(matrix33 a, matrix33 b)
{
matrix33 m33;
m33.m = a.m * b.m;
return m33;
}
matrix33 __operator__div__(int a, matrix33 b)
{
matrix33 m33;
m33.m = a / b.m;
return m33;
}
matrix33 __operator__div__(float a, matrix33 b)
{
matrix33 m33;
m33.m = a / b.m;
return m33;
}
matrix33 __operator__div__(matrix33 a, int b)
{
matrix33 m33;
m33.m = a.m / b;
return m33;
}
matrix33 __operator__div__(matrix33 a, float b)
{
matrix33 m33;
m33.m = a.m / b;
return m33;
}
matrix33 __operator__div__(matrix33 a, matrix33 b)
{
matrix33 m33;
m33.m = a.m / b.m;
return m33;
}
int __operator__eq__(matrix33 a, matrix33 b)
{
return a.m == b.m;
}
int __operator__ne__(matrix33 a, matrix33 b)
{
return a.m != b.m;
}
float determinant (matrix33 a)
{
return determinant(a.m);
}
matrix33 transpose(matrix33 a)
{
matrix33 m33;
m33.m = transpose(a.m);
return m33;
}
point transform(matrix33 a, point b)
{
return transform(a.m, b);
}
vector transform(matrix33 a, vector b)
{
return transform(a.m, b);
}
normal transform(matrix33 a, normal b)
{
return transform(a.m, b);
}