Project

General

Profile

Download (6.61 KB) Statistics
| Branch: | Revision:

library / src / main / java / org / distorted / library / helpers / MatrixHelper.java @ 1dec66e0

1
///////////////////////////////////////////////////////////////////////////////////////////////////
2
// Copyright 2023 Leszek Koltunski  leszek@koltunski.pl                                          //
3
//                                                                                               //
4
// This file is part of Distorted.                                                               //
5
//                                                                                               //
6
// This library is free software; you can redistribute it and/or                                 //
7
// modify it under the terms of the GNU Lesser General Public                                    //
8
// License as published by the Free Software Foundation; either                                  //
9
// version 2.1 of the License, or (at your option) any later version.                            //
10
//                                                                                               //
11
// This library is distributed in the hope that it will be useful,                               //
12
// but WITHOUT ANY WARRANTY; without even the implied warranty of                                //
13
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU                             //
14
// Lesser General Public License for more details.                                               //
15
//                                                                                               //
16
// You should have received a copy of the GNU Lesser General Public                              //
17
// License along with this library; if not, write to the Free Software                           //
18
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA                //
19
///////////////////////////////////////////////////////////////////////////////////////////////////
20

    
21
package org.distorted.library.helpers;
22

    
23
///////////////////////////////////////////////////////////////////////////////////////////////////
24

    
25
public class MatrixHelper
26
  {
27
  public static void setIdentity(float[] output)
28
    {
29
    output[ 0] = 1;
30
    output[ 1] = 0;
31
    output[ 2] = 0;
32
    output[ 3] = 0;
33
    output[ 4] = 0;
34
    output[ 5] = 1;
35
    output[ 6] = 0;
36
    output[ 7] = 0;
37
    output[ 8] = 0;
38
    output[ 9] = 0;
39
    output[10] = 1;
40
    output[11] = 0;
41
    output[12] = 0;
42
    output[13] = 0;
43
    output[14] = 0;
44
    output[15] = 1;
45
    }
46

    
47
///////////////////////////////////////////////////////////////////////////////////////////////////
48

    
49
  public static void multiply(float[] output, float[] m1, float[] m2)
50
    {
51
    output[ 0] = m1[ 0]*m2[ 0] + m1[ 4]*m2[ 1] + m1[ 8]*m2[ 2] + m1[12]*m2[ 3];
52
    output[ 1] = m1[ 1]*m2[ 0] + m1[ 5]*m2[ 1] + m1[ 9]*m2[ 2] + m1[13]*m2[ 3];
53
    output[ 2] = m1[ 2]*m2[ 0] + m1[ 6]*m2[ 1] + m1[10]*m2[ 2] + m1[14]*m2[ 3];
54
    output[ 3] = m1[ 3]*m2[ 0] + m1[ 7]*m2[ 1] + m1[11]*m2[ 2] + m1[15]*m2[ 3];
55

    
56
    output[ 4] = m1[ 0]*m2[ 4] + m1[ 4]*m2[ 5] + m1[ 8]*m2[ 6] + m1[12]*m2[ 7];
57
    output[ 5] = m1[ 1]*m2[ 4] + m1[ 5]*m2[ 5] + m1[ 9]*m2[ 6] + m1[13]*m2[ 7];
58
    output[ 6] = m1[ 2]*m2[ 4] + m1[ 6]*m2[ 5] + m1[10]*m2[ 6] + m1[14]*m2[ 7];
59
    output[ 7] = m1[ 3]*m2[ 4] + m1[ 7]*m2[ 5] + m1[11]*m2[ 6] + m1[15]*m2[ 7];
60

    
61
    output[ 8] = m1[ 0]*m2[ 8] + m1[ 4]*m2[ 9] + m1[ 8]*m2[10] + m1[12]*m2[11];
62
    output[ 9] = m1[ 1]*m2[ 8] + m1[ 5]*m2[ 9] + m1[ 9]*m2[10] + m1[13]*m2[11];
63
    output[10] = m1[ 2]*m2[ 8] + m1[ 6]*m2[ 9] + m1[10]*m2[10] + m1[14]*m2[11];
64
    output[11] = m1[ 3]*m2[ 8] + m1[ 7]*m2[ 9] + m1[11]*m2[10] + m1[15]*m2[11];
65

    
66
    output[12] = m1[ 0]*m2[12] + m1[ 4]*m2[13] + m1[ 8]*m2[14] + m1[12]*m2[15];
67
    output[13] = m1[ 1]*m2[12] + m1[ 5]*m2[13] + m1[ 9]*m2[14] + m1[13]*m2[15];
68
    output[14] = m1[ 2]*m2[12] + m1[ 6]*m2[13] + m1[10]*m2[14] + m1[14]*m2[15];
69
    output[15] = m1[ 3]*m2[12] + m1[ 7]*m2[13] + m1[11]*m2[14] + m1[15]*m2[15];
70
    }
71

    
72
///////////////////////////////////////////////////////////////////////////////////////////////////
73

    
74
  public static void frustum(float[] output, float l, float r, float b, float t, float n, float f)
75
    {
76
    output[0]  =  2 * n / (r - l);
77
    output[1]  =  0;
78
    output[2]  =  0;
79
    output[3]  =  0;
80
    output[4]  =  0;
81
    output[5]  =  2 * n / (t - b);
82
    output[6]  =  0;
83
    output[7]  =  0;
84
    output[8]  =  (r + l) / (r - l);
85
    output[9]  =  (t + b) / (t - b);
86
    output[10] = -(f + n) / (f - n);
87
    output[11] = -1;
88
    output[12] =  0;
89
    output[13] =  0;
90
    output[14] = -(2 * f * n) / (f - n);
91
    output[15] =  0;
92
    }
93

    
94
///////////////////////////////////////////////////////////////////////////////////////////////////
95

    
96
  public static void ortho(float[] output, float l, float r, float b, float t, float n, float f)
97
    {
98
    output[0]  =  2 / (r - l);
99
    output[1]  =  0;
100
    output[2]  =  0;
101
    output[3]  =  0;
102
    output[4]  =  0;
103
    output[5]  =  2 / (t - b);
104
    output[6]  =  0;
105
    output[7]  =  0;
106
    output[8]  =  0;
107
    output[9]  =  0;
108
    output[10] = -2 / (f - n);
109
    output[11] =  0;
110
    output[12] = -(r + l) / (r - l);
111
    output[13] = -(t + b) / (t - b);
112
    output[14] = -(f + n) / (f - n);
113
    output[15] =  1;
114
    }
115

    
116
///////////////////////////////////////////////////////////////////////////////////////////////////
117

    
118
  public static void setLookAt(float[] output, float eyeX , float eyeY , float eyeZ ,
119
                                               float lookX, float lookY, float lookZ,
120
                                               float upX  , float upY  , float upZ  )
121
    {
122
    // TODO
123
    }
124

    
125
///////////////////////////////////////////////////////////////////////////////////////////////////
126

    
127
  public static void rotate(float[] output, float angle, float axisX, float axisY, float axisZ)
128
    {
129
    android.opengl.Matrix.rotateM(output,0,angle,axisX,axisY,axisZ);
130
    }
131

    
132
///////////////////////////////////////////////////////////////////////////////////////////////////
133

    
134
  public static void translate(float[] output, float dx, float dy, float dz)
135
    {
136
    output[12] += ( output[ 0]*dx + output[ 4]*dy + output[ 8]*dz);
137
    output[13] += ( output[ 1]*dx + output[ 5]*dy + output[ 9]*dz);
138
    output[14] += ( output[ 2]*dx + output[ 6]*dy + output[10]*dz);
139
    output[15] += ( output[ 3]*dx + output[ 7]*dy + output[11]*dz);
140
    }
141

    
142
///////////////////////////////////////////////////////////////////////////////////////////////////
143

    
144
  public static void scale(float[] output, float sx, float sy, float sz)
145
    {
146
    output[ 0] *= sx;
147
    output[ 1] *= sx;
148
    output[ 2] *= sx;
149
    output[ 3] *= sx;
150

    
151
    output[ 4] *= sy;
152
    output[ 5] *= sy;
153
    output[ 6] *= sy;
154
    output[ 7] *= sy;
155

    
156
    output[ 8] *= sz;
157
    output[ 9] *= sz;
158
    output[10] *= sz;
159
    output[11] *= sz;
160
    }
161
  }
(1-1/2)