Project

General

Profile

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

library / src / main / java / org / distorted / library / effect / MatrixEffectRotate.java @ 8e28b6ff

1 2014665f leszek
///////////////////////////////////////////////////////////////////////////////////////////////////
2
// Copyright 2017 Leszek Koltunski                                                               //
3
//                                                                                               //
4
// This file is part of Distorted.                                                               //
5
//                                                                                               //
6
// Distorted is free software: you can redistribute it and/or modify                             //
7
// it under the terms of the GNU General Public License as published by                          //
8
// the Free Software Foundation, either version 2 of the License, or                             //
9
// (at your option) any later version.                                                           //
10
//                                                                                               //
11
// Distorted 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                                 //
14
// GNU General Public License for more details.                                                  //
15
//                                                                                               //
16
// You should have received a copy of the GNU General Public License                             //
17
// along with Distorted.  If not, see <http://www.gnu.org/licenses/>.                            //
18
///////////////////////////////////////////////////////////////////////////////////////////////////
19
20
package org.distorted.library.effect;
21
22 227b03bd Leszek Koltunski
import android.opengl.Matrix;
23
24 6d62a900 Leszek Koltunski
import org.distorted.library.type.Data1D;
25
import org.distorted.library.type.Data3D;
26
27 2014665f leszek
///////////////////////////////////////////////////////////////////////////////////////////////////
28
29
public class MatrixEffectRotate extends MatrixEffect
30
  {
31 0dd98279 Leszek Koltunski
  private Data1D mAngle;
32
  private Data3D mAxis, mCenter;
33
34 2014665f leszek
///////////////////////////////////////////////////////////////////////////////////////////////////
35 6bb59aad Leszek Koltunski
/**
36
 * Rotates the Object by 'angle' degrees around the center.
37
 * Static axis of rotation is given by the last parameter.
38
 *
39
 * @param angle  Angle that we want to rotate the Object to. Unit: degrees
40
 * @param axis   Axis of rotation
41
 * @param center Coordinates of the Point we are rotating around.
42
 */
43 0dd98279 Leszek Koltunski
  public MatrixEffectRotate(Data1D angle, Data3D axis, Data3D center)
44 6d62a900 Leszek Koltunski
    {
45 9d0d8530 leszek
    super(EffectName.ROTATE);
46 0dd98279 Leszek Koltunski
    mAngle = angle;
47
    mAxis = axis;
48
    mCenter = center;
49 6d62a900 Leszek Koltunski
    }
50
51 15aa7d94 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
52
53
  public boolean compute(float[] uniforms, int index, long currentDuration, long step )
54
    {
55 0dd98279 Leszek Koltunski
    mCenter.get(uniforms,index+4,currentDuration,step);
56
    mAxis.get(uniforms,index+1,currentDuration,step);
57
    return mAngle.get(uniforms,index,currentDuration,step);
58 15aa7d94 Leszek Koltunski
    }
59 227b03bd Leszek Koltunski
60
///////////////////////////////////////////////////////////////////////////////////////////////////
61
62
  public void apply(float[] matrix, float[] uniforms, int index)
63
    {
64
    float alpha = uniforms[NUM_UNIFORMS*index  ];
65
    float axisX = uniforms[NUM_UNIFORMS*index+1];
66
    float axisY = uniforms[NUM_UNIFORMS*index+2];
67
    float axisZ = uniforms[NUM_UNIFORMS*index+3];
68
69
    float x = uniforms[NUM_UNIFORMS*index+4];
70
    float y = uniforms[NUM_UNIFORMS*index+5];
71
    float z = uniforms[NUM_UNIFORMS*index+6];
72
73
    Matrix.translateM(matrix, 0, x,-y, z);
74
    Matrix.rotateM( matrix, 0, alpha, axisX, axisY, axisZ);
75
    Matrix.translateM(matrix, 0,-x, y,-z);
76
    }
77 2014665f leszek
  }