Project

General

Profile

« Previous | Next » 

Revision f046b159

Added by Leszek Koltunski almost 4 years ago

First attempt at the MeshBase.apply(VertexEffect) API.

View differences:

src/main/java/org/distorted/library/effect/VertexEffectQuaternion.java
29 29
 */
30 30
public class VertexEffectQuaternion extends VertexEffect
31 31
  {
32
  private static final EffectName NAME = EffectName.VERTEX_QUATERNION;
33

  
32 34
  private Data4D mQuaternion;
33 35
  private Data3D mCenter;
34 36

  
......
41 43
  public boolean compute(float[] uniforms, int index, long currentDuration, long step )
42 44
    {
43 45
    mCenter.get(uniforms,index+CENTER_OFFSET,currentDuration,step);
44
    return mQuaternion.get(uniforms,index,currentDuration,step);
46
    return mQuaternion.get(uniforms,index+VALUES_OFFSET,currentDuration,step);
47
    }
48

  
49
///////////////////////////////////////////////////////////////////////////////////////////////////
50

  
51
  static String code()
52
    {
53
    return
54

  
55
       "float qx = vUniforms[effect].x;               \n"
56
     + "float qy = vUniforms[effect].y;               \n"
57
     + "float qz = vUniforms[effect].z;               \n"
58
     + "float qw = vUniforms[effect].w;               \n"
59
     + "vec3 center = vUniforms[effect+1].yzw;        \n"
60

  
61
     + "v -= center;                                  \n"
62

  
63
     + "float tx = qx - v.z*qy + v.y*qz + v.x*qw;     \n"
64
     + "float ty = qy + v.z*qx + v.y*qw - v.x*qz;     \n"
65
     + "float tz = qz + v.z*qw - v.y*qx + v.x*qy;     \n"
66
     + "float tw = qw - v.z*qz - v.y*qy - v.x*qx;     \n"
67

  
68
     + "v.x = qw*tx + qz*ty - qy*tz - qx*tw;          \n"
69
     + "v.y = qw*ty - qz*tx - qy*tw + qx*tz;          \n"
70
     + "v.z = qw*tz - qz*tw + qy*tx - qx*ty;          \n"
71

  
72
     + "v += center;                                  \n"
73

  
74
     + "float nx =  - n.z*qy + n.y*qz + n.x*qw;       \n"
75
     + "float ny =  + n.z*qx + n.y*qw - n.x*qz;       \n"
76
     + "float nz =  + n.z*qw - n.y*qx + n.x*qy;       \n"
77
     + "float nw =  - n.z*qz - n.y*qy - n.x*qx;       \n"
78

  
79
     + "n.x = qw*nx + qz*ny - qy*nz - qx*nw;          \n"
80
     + "n.y = qw*ny - qz*nx - qy*nw + qx*nz;          \n"
81
     + "n.z = qw*nz - qz*nw + qy*nx - qx*ny;          \n";
45 82
    }
46 83

  
47 84
///////////////////////////////////////////////////////////////////////////////////////////////////
......
52 89
 */
53 90
  public static void enable()
54 91
    {
55
    addEffect( EffectName.VERTEX_QUATERNION,
56
               "float qx = vUniforms[effect].x;               \n"
57
             + "float qy = vUniforms[effect].y;               \n"
58
             + "float qz = vUniforms[effect].z;               \n"
59
             + "float qw = vUniforms[effect].w;               \n"
60
             + "vec3 center = vUniforms[effect+1].yzw;        \n"
61

  
62
             + "v -= center;                                  \n"
63

  
64
             + "float tx = qx - v.z*qy + v.y*qz + v.x*qw;     \n"
65
             + "float ty = qy + v.z*qx + v.y*qw - v.x*qz;     \n"
66
             + "float tz = qz + v.z*qw - v.y*qx + v.x*qy;     \n"
67
             + "float tw = qw - v.z*qz - v.y*qy - v.x*qx;     \n"
68

  
69
             + "v.x = qw*tx + qz*ty - qy*tz - qx*tw;          \n"
70
             + "v.y = qw*ty - qz*tx - qy*tw + qx*tz;          \n"
71
             + "v.z = qw*tz - qz*tw + qy*tx - qx*ty;          \n"
72

  
73
             + "v += center;                                  \n"
74

  
75
             + "float nx =  - n.z*qy + n.y*qz + n.x*qw;       \n"
76
             + "float ny =  + n.z*qx + n.y*qw - n.x*qz;       \n"
77
             + "float nz =  + n.z*qw - n.y*qx + n.x*qy;       \n"
78
             + "float nw =  - n.z*qz - n.y*qy - n.x*qx;       \n"
79

  
80
             + "n.x = qw*nx + qz*ny - qy*nz - qx*nw;          \n"
81
             + "n.y = qw*ny - qz*nx - qy*nw + qx*nz;          \n"
82
             + "n.z = qw*nz - qz*nw + qy*nx - qx*ny;          \n"
83
             );
92
    addEffect( NAME, code() );
84 93
    }
85 94

  
86 95
///////////////////////////////////////////////////////////////////////////////////////////////////
......
92 101
 */
93 102
  public VertexEffectQuaternion(Data4D quaternion, Data3D center )
94 103
    {
95
    super(EffectName.VERTEX_QUATERNION);
104
    super(NAME);
96 105
    mQuaternion = quaternion;
97 106
    mCenter = center;
98 107
    }

Also available in: Unified diff