-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathttransform.cpp
executable file
·70 lines (63 loc) · 1.63 KB
/
ttransform.cpp
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
#include "ttransform.h"
TTransform::TTransform()
{
scaleFactorX = 1.0;
scaleFactorY = 1.0;
scaleFactorZ = 1.0;
}
TTransform::~TTransform()
{
}
QMatrix4x4 TTransform::transformMatrix() const
{
// 6 possible permutations
// SRT
// STR
// TSR
// RST
// RTS
// TRS
QMatrix4x4 scale; scale.scale(scaleFactorX, scaleFactorY, scaleFactorZ);
switch(transformOrder)
{
case 0: return mat_translate * mat_rotate * scale;
case 1: return mat_rotate * mat_translate * scale;
case 2: return mat_rotate * scale * mat_translate;
case 3: return mat_translate * scale * mat_rotate;
case 4: return scale * mat_translate * mat_rotate;
case 5: return scale * mat_rotate * mat_translate;
default: return QMatrix4x4();
}
}
void TTransform::setTransformOrder(int order)
{
if (order < 6 && order >= 0)
transformOrder = order;
else
order = 0;
}
void TTransform::setRotationAxisOrder(int order)
{
// 6 possible permutations
// xyz
// xzy
// zxy
// yxz
// yzx
// zyx
switch(order)
{
case 0: mat_rotate = mat_rotateZ * mat_rotateY * mat_rotateX;
break;
case 1: mat_rotate = mat_rotateY * mat_rotateZ * mat_rotateX;
break;
case 2: mat_rotate = mat_rotateY * mat_rotateX * mat_rotateZ;
break;
case 3: mat_rotate = mat_rotateZ * mat_rotateX * mat_rotateY;
break;
case 4: mat_rotate = mat_rotateX * mat_rotateZ * mat_rotateY;
break;
case 5: mat_rotate = mat_rotateX * mat_rotateY * mat_rotateZ;
break;
}
}