Project

General

Profile

« Previous | Next » 

Revision e54bfada

Added by Leszek Koltunski almost 4 years ago

Have VERTEX_QUATERNION, VERTEX_ROTATE and VERTEX_SHEAR modify inflate vectors.
Split Vertex attribute array into two (the one modified by preapply effects and the one not)

View differences:

src/main/java/org/distorted/library/mesh/MeshTriangles.java
30 30

  
31 31
///////////////////////////////////////////////////////////////////////////////////////////////////
32 32

  
33
  private int addVertex(int vertex, float x, float y, float[] attribs)
33
  private int addVertex(int vertex, float x, float y, float[] attribs1, float[] attribs2)
34 34
     {
35 35
     remainingVert--;
36 36

  
37
     attribs[VERT_ATTRIBS*vertex + POS_ATTRIB  ] = x-0.5f;
38
     attribs[VERT_ATTRIBS*vertex + POS_ATTRIB+1] = y-0.5f;
39
     attribs[VERT_ATTRIBS*vertex + POS_ATTRIB+2] = 0.0f;
37
     attribs1[VERT1_ATTRIBS*vertex + POS_ATTRIB  ] = x-0.5f;
38
     attribs1[VERT1_ATTRIBS*vertex + POS_ATTRIB+1] = y-0.5f;
39
     attribs1[VERT1_ATTRIBS*vertex + POS_ATTRIB+2] = 0.0f;
40 40

  
41
     attribs[VERT_ATTRIBS*vertex + NOR_ATTRIB  ] = 0.0f;
42
     attribs[VERT_ATTRIBS*vertex + NOR_ATTRIB+1] = 0.0f;
43
     attribs[VERT_ATTRIBS*vertex + NOR_ATTRIB+2] = 1.0f;
41
     attribs1[VERT1_ATTRIBS*vertex + NOR_ATTRIB  ] = 0.0f;
42
     attribs1[VERT1_ATTRIBS*vertex + NOR_ATTRIB+1] = 0.0f;
43
     attribs1[VERT1_ATTRIBS*vertex + NOR_ATTRIB+2] = 1.0f;
44 44

  
45
     attribs[VERT_ATTRIBS*vertex + INF_ATTRIB  ] = (x-0.5f);
46
     attribs[VERT_ATTRIBS*vertex + INF_ATTRIB+1] = (y-0.5f);
47
     attribs[VERT_ATTRIBS*vertex + INF_ATTRIB+2] = 0.01f   ;  // Inflated surface needs to be slightly in front
45
     attribs1[VERT1_ATTRIBS*vertex + INF_ATTRIB  ] = (x-0.5f);
46
     attribs1[VERT1_ATTRIBS*vertex + INF_ATTRIB+1] = (y-0.5f);
47
     attribs1[VERT1_ATTRIBS*vertex + INF_ATTRIB+2] = 0.01f   ;  // Inflated surface needs to be slightly in front
48 48

  
49
     attribs[VERT_ATTRIBS*vertex + TEX_ATTRIB  ] = x;
50
     attribs[VERT_ATTRIBS*vertex + TEX_ATTRIB+1] = y;
49
     attribs2[VERT2_ATTRIBS*vertex + TEX_ATTRIB  ] = x;
50
     attribs2[VERT2_ATTRIBS*vertex + TEX_ATTRIB+1] = y;
51 51

  
52 52
     return vertex+1;
53 53
     }
......
62 62

  
63 63
///////////////////////////////////////////////////////////////////////////////////////////////////
64 64

  
65
  private int buildRow(int vertex,float sx, float sy, int length, float dx, float dy, float[] attribs)
65
  private int buildRow(int vertex,float sx, float sy, int length, float dx, float dy, float[] attribs1, float[] attribs2)
66 66
    {
67 67
    for(int i=0; i<length; i++)
68 68
      {
69
      vertex = addVertex(vertex, sx   , sy   , attribs);
70
      vertex = addVertex(vertex, sx+dx, sy+dy, attribs);
69
      vertex = addVertex(vertex, sx   , sy   , attribs1, attribs2);
70
      vertex = addVertex(vertex, sx+dx, sy+dy, attribs1, attribs2);
71 71
      sx += 2*dx;
72 72
      }
73 73

  
74
    vertex = addVertex(vertex, sx, sy, attribs);
74
    vertex = addVertex(vertex, sx, sy, attribs1, attribs2);
75 75

  
76 76
    return vertex;
77 77
    }
78 78

  
79 79
///////////////////////////////////////////////////////////////////////////////////////////////////
80 80

  
81
  private void buildGrid(float[] attribs, int level)
81
  private void buildGrid(float[] attribs1, float[] attribs2, int level)
82 82
     {
83 83
     float sx = 0.0f;
84 84
     float sy = 0.0f;
......
88 88

  
89 89
     for(int row=level; row>=1; row--)
90 90
       {
91
       vertex = buildRow(vertex,sx,sy,row,dx,dy,attribs);
91
       vertex = buildRow(vertex,sx,sy,row,dx,dy,attribs1,attribs2);
92 92

  
93 93
       sx += 2*dx*(row-0.5f);
94 94
       sy += dy;
......
111 111

  
112 112
     computeNumberOfVertices(level);
113 113

  
114
     float[] attribs= new float[VERT_ATTRIBS*numVertices];
115
     buildGrid(attribs,level);
114
     float[] attribs1= new float[VERT1_ATTRIBS*numVertices];
115
     float[] attribs2= new float[VERT2_ATTRIBS*numVertices];
116

  
117
     buildGrid(attribs1, attribs2, level);
116 118

  
117 119
     if( remainingVert!=0 )
118 120
       android.util.Log.d("MeshTriangles", "remainingVert " +remainingVert );
119 121

  
120
     setAttribs(attribs);
122
     setAttribs(attribs1, attribs2);
121 123
     }
122 124

  
123 125
///////////////////////////////////////////////////////////////////////////////////////////////////

Also available in: Unified diff