Revision e7f85322
Added by Leszek Koltunski almost 5 years ago
src/main/java/org/distorted/library/mesh/MeshBase.java | ||
---|---|---|
186 | 186 |
{ |
187 | 187 |
MeshBase mesh; |
188 | 188 |
Component comp; |
189 |
int com, num, len = meshes.length;
|
|
189 |
int numComponents, numVertices, numMeshes = meshes.length;
|
|
190 | 190 |
int origVertices = mNumVertices; |
191 | 191 |
|
192 | 192 |
// compute new numVertices; take care of Components |
193 | 193 |
|
194 | 194 |
if( origVertices>0 ) |
195 | 195 |
{ |
196 |
com = mComponent.size();
|
|
196 |
numComponents = mComponent.size();
|
|
197 | 197 |
mNumVertices+= ( mNumVertices%2==1 ? 2:1 ); |
198 |
mComponent.get(com-1).mEndIndex = mNumVertices;
|
|
198 |
mComponent.get(numComponents-1).mEndIndex = mNumVertices;
|
|
199 | 199 |
} |
200 | 200 |
|
201 |
for(int i=0; i<len; i++)
|
|
201 |
for(int i=0; i<numMeshes; i++)
|
|
202 | 202 |
{ |
203 | 203 |
mesh = meshes[i]; |
204 |
com = mesh.mComponent.size();
|
|
204 |
numComponents = mesh.mComponent.size();
|
|
205 | 205 |
|
206 |
for(int j=0; j<com; j++)
|
|
206 |
for(int j=0; j<numComponents; j++)
|
|
207 | 207 |
{ |
208 | 208 |
comp = new Component(mesh.mComponent.get(j)); |
209 | 209 |
comp.mEndIndex += mNumVertices; |
210 | 210 |
mComponent.add(comp); |
211 | 211 |
} |
212 | 212 |
|
213 |
num = mesh.mNumVertices; |
|
213 |
numVertices = mesh.mNumVertices;
|
|
214 | 214 |
|
215 |
if( mNumVertices==0 ) mNumVertices += (num%2==1 ? num+2 : num+1); |
|
216 |
else if( i==len-1 ) mNumVertices += (num+1); |
|
217 |
else mNumVertices += (num%2==1 ? num+3 : num+2); |
|
215 |
if( mNumVertices==0 ) |
|
216 |
{ |
|
217 |
if( numMeshes>1 ) |
|
218 |
mNumVertices += (numVertices%2==1 ? numVertices+2 : numVertices+1); |
|
219 |
else |
|
220 |
mNumVertices += numVertices; |
|
221 |
} |
|
222 |
else if( i==numMeshes-1 ) mNumVertices += (numVertices+1); |
|
223 |
else mNumVertices += (numVertices%2==1 ? numVertices+3 : numVertices+2); |
|
218 | 224 |
} |
219 | 225 |
|
220 | 226 |
// allocate new attrib array |
221 | 227 |
float[] newAttribs = new float[VERT_ATTRIBS*mNumVertices]; |
222 |
num = origVertices; |
|
228 |
numVertices = origVertices;
|
|
223 | 229 |
|
224 | 230 |
if( origVertices>0 ) |
225 | 231 |
{ |
226 |
System.arraycopy(mVertAttribs, 0, newAttribs, 0, VERT_ATTRIBS*num); |
|
232 |
System.arraycopy(mVertAttribs, 0, newAttribs, 0, VERT_ATTRIBS*numVertices);
|
|
227 | 233 |
System.arraycopy(mVertAttribs, VERT_ATTRIBS*(origVertices-1), newAttribs, VERT_ATTRIBS*origVertices, VERT_ATTRIBS ); |
228 | 234 |
origVertices++; |
229 | 235 |
|
230 |
if( num%2==1 ) |
|
236 |
if( numVertices%2==1 )
|
|
231 | 237 |
{ |
232 | 238 |
System.arraycopy(mVertAttribs, VERT_ATTRIBS*(origVertices-1), newAttribs, VERT_ATTRIBS*origVertices, VERT_ATTRIBS); |
233 | 239 |
origVertices++; |
234 | 240 |
} |
235 | 241 |
} |
236 | 242 |
|
237 |
for(int i=0; i<len; i++)
|
|
243 |
for(int i=0; i<numMeshes; i++)
|
|
238 | 244 |
{ |
239 | 245 |
mesh = meshes[i]; |
240 |
num = mesh.mNumVertices; |
|
246 |
numVertices = mesh.mNumVertices;
|
|
241 | 247 |
|
242 | 248 |
if( origVertices>0 ) |
243 | 249 |
{ |
244 | 250 |
System.arraycopy(mesh.mVertAttribs, 0, newAttribs, VERT_ATTRIBS*origVertices, VERT_ATTRIBS ); |
245 | 251 |
origVertices++; |
246 | 252 |
} |
247 |
System.arraycopy(mesh.mVertAttribs, 0, newAttribs, VERT_ATTRIBS*origVertices, VERT_ATTRIBS*num); |
|
248 |
origVertices+=num; |
|
253 |
System.arraycopy(mesh.mVertAttribs, 0, newAttribs, VERT_ATTRIBS*origVertices, VERT_ATTRIBS*numVertices);
|
|
254 |
origVertices+=numVertices;
|
|
249 | 255 |
|
250 |
if( i<len-1 )
|
|
256 |
if( i<numMeshes-1 )
|
|
251 | 257 |
{ |
252 |
System.arraycopy(mesh.mVertAttribs, VERT_ATTRIBS*(num-1), newAttribs, VERT_ATTRIBS*origVertices, VERT_ATTRIBS); |
|
258 |
System.arraycopy(mesh.mVertAttribs, VERT_ATTRIBS*(numVertices-1), newAttribs, VERT_ATTRIBS*origVertices, VERT_ATTRIBS);
|
|
253 | 259 |
origVertices++; |
254 | 260 |
|
255 |
if( num%2==1 ) |
|
261 |
if( numVertices%2==1 )
|
|
256 | 262 |
{ |
257 |
System.arraycopy(mesh.mVertAttribs, VERT_ATTRIBS*(num-1), newAttribs, VERT_ATTRIBS*origVertices, VERT_ATTRIBS); |
|
263 |
System.arraycopy(mesh.mVertAttribs, VERT_ATTRIBS*(numVertices-1), newAttribs, VERT_ATTRIBS*origVertices, VERT_ATTRIBS);
|
|
258 | 264 |
origVertices++; |
259 | 265 |
} |
260 | 266 |
} |
Also available in: Unified diff
Progress with of Pyraminx.
Bugfix for joining a single Mesh!