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/MeshRectangles.java
55 55

  
56 56
///////////////////////////////////////////////////////////////////////////////////////////////////
57 57

  
58
  private int addVertex(int vertex, float x, float y, float[] attribs)
58
  private int addVertex(int vertex, float x, float y, float[] attribs1, float[] attribs2)
59 59
     {
60 60
     remainingVert--;
61 61

  
62
     attribs[VERT_ATTRIBS*vertex + POS_ATTRIB  ] = x-0.5f;
63
     attribs[VERT_ATTRIBS*vertex + POS_ATTRIB+1] = 0.5f-y;
64
     attribs[VERT_ATTRIBS*vertex + POS_ATTRIB+2] = 0.0f;
62
     attribs1[VERT1_ATTRIBS*vertex + POS_ATTRIB  ] = x-0.5f;
63
     attribs1[VERT1_ATTRIBS*vertex + POS_ATTRIB+1] = 0.5f-y;
64
     attribs1[VERT1_ATTRIBS*vertex + POS_ATTRIB+2] = 0.0f;
65 65

  
66
     attribs[VERT_ATTRIBS*vertex + NOR_ATTRIB  ] = 0.0f;
67
     attribs[VERT_ATTRIBS*vertex + NOR_ATTRIB+1] = 0.0f;
68
     attribs[VERT_ATTRIBS*vertex + NOR_ATTRIB+2] = 1.0f;
66
     attribs1[VERT1_ATTRIBS*vertex + NOR_ATTRIB  ] = 0.0f;
67
     attribs1[VERT1_ATTRIBS*vertex + NOR_ATTRIB+1] = 0.0f;
68
     attribs1[VERT1_ATTRIBS*vertex + NOR_ATTRIB+2] = 1.0f;
69 69

  
70
     attribs[VERT_ATTRIBS*vertex + INF_ATTRIB  ] = (x-0.5f);
71
     attribs[VERT_ATTRIBS*vertex + INF_ATTRIB+1] = (0.5f-y);
72
     attribs[VERT_ATTRIBS*vertex + INF_ATTRIB+2] = 0.01f   ;  // Inflated surface needs to be slightly in front
70
     attribs1[VERT1_ATTRIBS*vertex + INF_ATTRIB  ] = (x-0.5f);
71
     attribs1[VERT1_ATTRIBS*vertex + INF_ATTRIB+1] = (0.5f-y);
72
     attribs1[VERT1_ATTRIBS*vertex + INF_ATTRIB+2] = 0.01f   ;  // Inflated surface needs to be slightly in front
73 73

  
74
     attribs[VERT_ATTRIBS*vertex + TEX_ATTRIB  ] = x;
75
     attribs[VERT_ATTRIBS*vertex + TEX_ATTRIB+1] = 1.0f-y;
74
     attribs2[VERT2_ATTRIBS*vertex + TEX_ATTRIB  ] = x;
75
     attribs2[VERT2_ATTRIBS*vertex + TEX_ATTRIB+1] = 1.0f-y;
76 76

  
77 77
     return vertex+1;
78 78
     }
79 79

  
80 80
///////////////////////////////////////////////////////////////////////////////////////////////////
81 81

  
82
  private int repeatLast(int vertex, float[] attribs)
82
  private int repeatLast(int vertex, float[] attribs1, float[] attribs2)
83 83
     {
84 84
     if( vertex>0 )
85 85
       {
86 86
       remainingVert--;
87 87

  
88
       attribs[VERT_ATTRIBS*vertex + POS_ATTRIB  ] = attribs[VERT_ATTRIBS*(vertex-1) + POS_ATTRIB  ];
89
       attribs[VERT_ATTRIBS*vertex + POS_ATTRIB+1] = attribs[VERT_ATTRIBS*(vertex-1) + POS_ATTRIB+1];
90
       attribs[VERT_ATTRIBS*vertex + POS_ATTRIB+2] = attribs[VERT_ATTRIBS*(vertex-1) + POS_ATTRIB+2];
88
       attribs1[VERT1_ATTRIBS*vertex + POS_ATTRIB  ] = attribs1[VERT1_ATTRIBS*(vertex-1) + POS_ATTRIB  ];
89
       attribs1[VERT1_ATTRIBS*vertex + POS_ATTRIB+1] = attribs1[VERT1_ATTRIBS*(vertex-1) + POS_ATTRIB+1];
90
       attribs1[VERT1_ATTRIBS*vertex + POS_ATTRIB+2] = attribs1[VERT1_ATTRIBS*(vertex-1) + POS_ATTRIB+2];
91 91

  
92
       attribs[VERT_ATTRIBS*vertex + NOR_ATTRIB  ] = attribs[VERT_ATTRIBS*(vertex-1) + NOR_ATTRIB  ];
93
       attribs[VERT_ATTRIBS*vertex + NOR_ATTRIB+1] = attribs[VERT_ATTRIBS*(vertex-1) + NOR_ATTRIB+1];
94
       attribs[VERT_ATTRIBS*vertex + NOR_ATTRIB+2] = attribs[VERT_ATTRIBS*(vertex-1) + NOR_ATTRIB+2];
92
       attribs1[VERT1_ATTRIBS*vertex + NOR_ATTRIB  ] = attribs1[VERT1_ATTRIBS*(vertex-1) + NOR_ATTRIB  ];
93
       attribs1[VERT1_ATTRIBS*vertex + NOR_ATTRIB+1] = attribs1[VERT1_ATTRIBS*(vertex-1) + NOR_ATTRIB+1];
94
       attribs1[VERT1_ATTRIBS*vertex + NOR_ATTRIB+2] = attribs1[VERT1_ATTRIBS*(vertex-1) + NOR_ATTRIB+2];
95 95

  
96
       attribs[VERT_ATTRIBS*vertex + INF_ATTRIB  ] = attribs[VERT_ATTRIBS*(vertex-1) + INF_ATTRIB  ];
97
       attribs[VERT_ATTRIBS*vertex + INF_ATTRIB+1] = attribs[VERT_ATTRIBS*(vertex-1) + INF_ATTRIB+1];
98
       attribs[VERT_ATTRIBS*vertex + INF_ATTRIB+2] = attribs[VERT_ATTRIBS*(vertex-1) + INF_ATTRIB+2];
96
       attribs1[VERT1_ATTRIBS*vertex + INF_ATTRIB  ] = attribs1[VERT1_ATTRIBS*(vertex-1) + INF_ATTRIB  ];
97
       attribs1[VERT1_ATTRIBS*vertex + INF_ATTRIB+1] = attribs1[VERT1_ATTRIBS*(vertex-1) + INF_ATTRIB+1];
98
       attribs1[VERT1_ATTRIBS*vertex + INF_ATTRIB+2] = attribs1[VERT1_ATTRIBS*(vertex-1) + INF_ATTRIB+2];
99 99

  
100
       attribs[VERT_ATTRIBS*vertex + TEX_ATTRIB  ] = attribs[VERT_ATTRIBS*(vertex-1) + TEX_ATTRIB  ];
101
       attribs[VERT_ATTRIBS*vertex + TEX_ATTRIB+1] = attribs[VERT_ATTRIBS*(vertex-1) + TEX_ATTRIB+1];
100
       attribs2[VERT2_ATTRIBS*vertex + TEX_ATTRIB  ] = attribs2[VERT2_ATTRIBS*(vertex-1) + TEX_ATTRIB  ];
101
       attribs2[VERT2_ATTRIBS*vertex + TEX_ATTRIB+1] = attribs2[VERT2_ATTRIBS*(vertex-1) + TEX_ATTRIB+1];
102 102

  
103 103
       vertex++;
104 104
       }
......
108 108

  
109 109
///////////////////////////////////////////////////////////////////////////////////////////////////
110 110

  
111
  private void buildGrid(float[] attribs)
111
  private void buildGrid(float[] attribs1, float[] attribs2)
112 112
     {
113 113
     boolean lastBlockIsNE = false;
114 114
     boolean currentBlockIsNE;
......
130 130

  
131 131
         if( col==0 || (lastBlockIsNE^currentBlockIsNE) )
132 132
           {
133
           if( row!=0 && col==0 ) vertex = repeatLast(vertex,attribs);
134
           vertex= addVertex( vertex, x, y+(currentBlockIsNE?0:Y), attribs);
135
           if( row!=0 && col==0 ) vertex = repeatLast(vertex,attribs);
136
           if( lastBlockIsNE^currentBlockIsNE)  vertex = repeatLast(vertex,attribs);
137
           vertex= addVertex( vertex, x, y+(currentBlockIsNE?Y:0), attribs);
133
           if( row!=0 && col==0 ) vertex = repeatLast(vertex,attribs1,attribs2);
134
           vertex= addVertex( vertex, x, y+(currentBlockIsNE?0:Y), attribs1,attribs2);
135
           if( row!=0 && col==0 ) vertex = repeatLast(vertex,attribs1,attribs2);
136
           if( lastBlockIsNE^currentBlockIsNE)  vertex = repeatLast(vertex,attribs1,attribs2);
137
           vertex= addVertex( vertex, x, y+(currentBlockIsNE?Y:0), attribs1,attribs2);
138 138
           }
139
         vertex= addVertex( vertex, x+X, y+(currentBlockIsNE?0:Y), attribs);
140
         vertex= addVertex( vertex, x+X, y+(currentBlockIsNE?Y:0), attribs);
139
         vertex= addVertex( vertex, x+X, y+(currentBlockIsNE?0:Y), attribs1,attribs2);
140
         vertex= addVertex( vertex, x+X, y+(currentBlockIsNE?Y:0), attribs1,attribs2);
141 141

  
142 142
         lastBlockIsNE = currentBlockIsNE;
143 143
         x+=X;
......
156 156
 * @param cols Number of columns in the grid.
157 157
 * @param rows Number of rows in the grid.
158 158
 */
159
 public MeshRectangles(int cols, int rows)
159
  public MeshRectangles(int cols, int rows)
160 160
    {
161 161
    super();
162 162
    computeNumberOfVertices(cols,rows);
163 163

  
164
    float[] attribs= new float[VERT_ATTRIBS*numVertices];
164
    float[] attribs1= new float[VERT1_ATTRIBS*numVertices];
165
    float[] attribs2= new float[VERT2_ATTRIBS*numVertices];
165 166

  
166
    buildGrid(attribs);
167
    buildGrid(attribs1,attribs2);
167 168

  
168 169
    if( remainingVert!=0 )
169 170
      android.util.Log.d("MeshRectangles", "remainingVert " +remainingVert );
170 171

  
171
    setAttribs(attribs);
172
    setAttribs(attribs1,attribs2);
172 173
    }
173 174

  
174 175
///////////////////////////////////////////////////////////////////////////////////////////////////
175 176
/**
176 177
 * deep copy.
177 178
 */
178
 public MeshRectangles(MeshRectangles mesh)
179
   {
180
   super(mesh);
181
   }
179
  public MeshRectangles(MeshRectangles mesh)
180
    {
181
    super(mesh);
182
    }
182 183

  
183 184
///////////////////////////////////////////////////////////////////////////////////////////////////
184 185
/**
185 186
 * deep copy.
186 187
 */
187
 public MeshRectangles deepCopy()
188
   {
189
   return new MeshRectangles(this);
190
   }
188
  public MeshRectangles deepCopy()
189
    {
190
    return new MeshRectangles(this);
191
    }
191 192
 }

Also available in: Unified diff