Project

General

Profile

« Previous | Next » 

Revision 62c869ad

Added by Leszek Koltunski over 3 years ago

Fix normals in case of MatrixEffectScale / Shear.
Fix displaying the normal vector.

View differences:

src/main/java/org/distorted/library/mesh/MeshBase.java
255 255

  
256 256
   void applyMatrix(MatrixEffect effect, int andAssoc, int equAssoc)
257 257
     {
258
     float[] matrix   = new float[16];
258
     float[] matrixP  = new float[16];
259
     float[] matrixV  = new float[16];
259 260
     float[] uniforms = new float[7];
260 261
     int start, end=-1, numComp = mEffComponent.size();
261 262

  
262
     Matrix.setIdentityM(matrix,0);
263
     Matrix.setIdentityM(matrixP,0);
264
     Matrix.setIdentityM(matrixV,0);
263 265
     effect.compute(uniforms,0,0,0);
264
     effect.apply(matrix, uniforms, 0);
266
     effect.apply(matrixP, matrixV, uniforms, 0);
265 267

  
266 268
     for(int i=0; i<numComp; i++)
267 269
       {
......
270 272

  
271 273
       if( (andAssoc & mAndAssociation[i]) != 0 || (equAssoc == mEquAssociation[i]) )
272 274
         {
273
         applyMatrixToComponent(matrix,start,end);
275
         applyMatrixToComponent(matrixP, matrixV, start, end);
274 276
         }
275 277
       }
276 278

  
......
279 281

  
280 282
///////////////////////////////////////////////////////////////////////////////////////////////////
281 283

  
282
   private void applyMatrixToComponent(float[] matrix, int start, int end)
284
   private void applyMatrixToComponent(float[] matrixP, float[] matrixV, int start, int end)
283 285
     {
284 286
     float x,y,z;
285 287

  
......
289 291
       y = mVertAttribs1[index+POS_ATTRIB+1];
290 292
       z = mVertAttribs1[index+POS_ATTRIB+2];
291 293

  
292
       mVertAttribs1[index+POS_ATTRIB  ] = matrix[0]*x + matrix[4]*y + matrix[ 8]*z + matrix[12];
293
       mVertAttribs1[index+POS_ATTRIB+1] = matrix[1]*x + matrix[5]*y + matrix[ 9]*z + matrix[13];
294
       mVertAttribs1[index+POS_ATTRIB+2] = matrix[2]*x + matrix[6]*y + matrix[10]*z + matrix[14];
294
       mVertAttribs1[index+POS_ATTRIB  ] = matrixP[0]*x + matrixP[4]*y + matrixP[ 8]*z + matrixP[12];
295
       mVertAttribs1[index+POS_ATTRIB+1] = matrixP[1]*x + matrixP[5]*y + matrixP[ 9]*z + matrixP[13];
296
       mVertAttribs1[index+POS_ATTRIB+2] = matrixP[2]*x + matrixP[6]*y + matrixP[10]*z + matrixP[14];
295 297

  
296 298
       x = mVertAttribs1[index+NOR_ATTRIB  ];
297 299
       y = mVertAttribs1[index+NOR_ATTRIB+1];
298 300
       z = mVertAttribs1[index+NOR_ATTRIB+2];
299 301

  
300
       mVertAttribs1[index+NOR_ATTRIB  ] = matrix[0]*x + matrix[4]*y + matrix[ 8]*z;
301
       mVertAttribs1[index+NOR_ATTRIB+1] = matrix[1]*x + matrix[5]*y + matrix[ 9]*z;
302
       mVertAttribs1[index+NOR_ATTRIB+2] = matrix[2]*x + matrix[6]*y + matrix[10]*z;
302
       mVertAttribs1[index+NOR_ATTRIB  ] = matrixV[0]*x + matrixV[4]*y + matrixV[ 8]*z;
303
       mVertAttribs1[index+NOR_ATTRIB+1] = matrixV[1]*x + matrixV[5]*y + matrixV[ 9]*z;
304
       mVertAttribs1[index+NOR_ATTRIB+2] = matrixV[2]*x + matrixV[6]*y + matrixV[10]*z;
305

  
306
       x = mVertAttribs1[index+NOR_ATTRIB  ];
307
       y = mVertAttribs1[index+NOR_ATTRIB+1];
308
       z = mVertAttribs1[index+NOR_ATTRIB+2];
309

  
310
       float len1 = (float)Math.sqrt(x*x + y*y + z*z);
311

  
312
       if( len1>0.0f )
313
         {
314
         mVertAttribs1[index+NOR_ATTRIB  ] /= len1;
315
         mVertAttribs1[index+NOR_ATTRIB+1] /= len1;
316
         mVertAttribs1[index+NOR_ATTRIB+2] /= len1;
317
         }
303 318

  
304 319
       x = mVertAttribs1[index+INF_ATTRIB  ];
305 320
       y = mVertAttribs1[index+INF_ATTRIB+1];
306 321
       z = mVertAttribs1[index+INF_ATTRIB+2];
307 322

  
308
       mVertAttribs1[index+INF_ATTRIB  ] = matrix[0]*x + matrix[4]*y + matrix[ 8]*z;
309
       mVertAttribs1[index+INF_ATTRIB+1] = matrix[1]*x + matrix[5]*y + matrix[ 9]*z;
310
       mVertAttribs1[index+INF_ATTRIB+2] = matrix[2]*x + matrix[6]*y + matrix[10]*z;
323
       mVertAttribs1[index+INF_ATTRIB  ] = matrixV[0]*x + matrixV[4]*y + matrixV[ 8]*z;
324
       mVertAttribs1[index+INF_ATTRIB+1] = matrixV[1]*x + matrixV[5]*y + matrixV[ 9]*z;
325
       mVertAttribs1[index+INF_ATTRIB+2] = matrixV[2]*x + matrixV[6]*y + matrixV[10]*z;
326

  
327
       x = mVertAttribs1[index+INF_ATTRIB  ];
328
       y = mVertAttribs1[index+INF_ATTRIB+1];
329
       z = mVertAttribs1[index+INF_ATTRIB+2];
330

  
331
       float len2 = (float)Math.sqrt(x*x + y*y + z*z);
332

  
333
       if( len2>0.0f )
334
         {
335
         mVertAttribs1[index+INF_ATTRIB  ] /= len2;
336
         mVertAttribs1[index+INF_ATTRIB+1] /= len2;
337
         mVertAttribs1[index+INF_ATTRIB+2] /= len2;
338
         }
311 339
       }
312 340
     }
313 341

  

Also available in: Unified diff