MaxstARSDK  3.5.0
MasMatrixUtil.mm
1 //
2 // MasMatrixUtil.m
3 // MaxstAR
4 //
5 // Created by Kimseunglee on 2017. 12. 7..
6 // Copyright © 2017년 Maxst. All rights reserved.
7 //
8 
9 #import "MasMatrixUtil.h"
10 
11 @implementation MasMatrixUtil
12 
13 + (matrix_float4x4) makeMatrix:(float*) data {
14  return (matrix_float4x4){ { { data[0], data[1], data[2], data[3] }, { data[4], data[5], data[6], data[7] }, { data[8], data[9], data[10], data[11]}, { data[12], data[13], data[14], data[15] } } };
15 }
16 
17 + (matrix_float4x4) translation:(float)x y:(float)y z:(float)z {
18  vector_float4 translationVector = {x, y, z, 1};
19  matrix_float4x4 matrixTranslation = matrix_identity_float4x4;
20  matrixTranslation.columns[3] = translationVector;
21  return matrixTranslation;
22 }
23 
24 + (matrix_float4x4) translate:(float)x positionY:(float)y positionZ:(float)z matrix:(matrix_float4x4)matrix {
25  return matrix_identity_float4x4;
26 }
27 
28 + (matrix_float4x4) rotation:(float)x y:(float)y z:(float)z {
29  matrix_float4x4 matrixRotation = [MasMatrixUtil rotationAroundX:x];
30 
31  matrixRotation = matrix_multiply(matrixRotation, [MasMatrixUtil rotationAroundY:y]);
32  matrixRotation = matrix_multiply(matrixRotation, [MasMatrixUtil rotationAroundZ:z]);
33 
34  return matrixRotation;
35 }
36 
37 + (matrix_float4x4) rotate:(float)x y:(float)y z:(float)z matrix:(matrix_float4x4)matrix {
38  return matrix_identity_float4x4;
39 }
40 
41 + (matrix_float4x4) scale:(float)x y:(float)y z:(float)z {
42 
43  matrix_float4x4 matrixScale = matrix_identity_float4x4;
44 
45  matrixScale.columns[0].x = x;
46  matrixScale.columns[1].y = y;
47  matrixScale.columns[2].z = z;
48 
49  return matrixScale;
50 }
51 
52 + (matrix_float4x4) rotationAroundZ:(float)radians {
53  matrix_float4x4 rotationMatrix = matrix_identity_float4x4;
54 
55  rotationMatrix.columns[0].x = cos(radians);
56  rotationMatrix.columns[0].y = sin(radians);
57 
58  rotationMatrix.columns[1].x = -sin(radians);
59  rotationMatrix.columns[1].y = cos(radians);
60 
61  return rotationMatrix;
62 }
63 
64 + (matrix_float4x4) rotationAroundY:(float)radians {
65  matrix_float4x4 rotationMatrix = matrix_identity_float4x4;
66 
67  rotationMatrix.columns[0].x = cos(radians);
68  rotationMatrix.columns[0].z = -sin(radians);
69 
70  rotationMatrix.columns[2].x = sin(radians);
71  rotationMatrix.columns[2].z = cos(radians);
72 
73  return rotationMatrix;
74 }
75 
76 + (matrix_float4x4) rotationAroundX:(float)radians {
77  matrix_float4x4 rotationMatrix = matrix_identity_float4x4;
78 
79  rotationMatrix.columns[1].y = cos(radians);
80  rotationMatrix.columns[1].z = sin(radians);
81 
82  rotationMatrix.columns[2].y = -sin(radians);
83  rotationMatrix.columns[2].z = cos(radians);
84 
85  return rotationMatrix;
86 }
87 
88 + (const float *) floatArrayForMatrix:(matrix_float4x4)mat
89 {
90  const float *v = (const float *)&mat;
91  return v;
92 }
93 
94 @end