Project

General

Profile

« Previous | Next » 

Revision 140f2c4e

Added by Leszek Koltunski about 3 years ago

Face cubit creation: progress, a cube renders correctly :)

View differences:

src/main/java/org/distorted/examples/meshfile/FactoryCubit.java
263 263
    mBuffer[1] = v1z*v2x - v2z*v1x;
264 264
    mBuffer[2] = v1x*v2y - v2x*v1y;
265 265

  
266
android.util.Log.e("D", " buffer: "+mBuffer[0]+" "+mBuffer[1]+" "+mBuffer[2]);
266
    float len = mBuffer[0]*mBuffer[0] + mBuffer[1]*mBuffer[1] + mBuffer[2]*mBuffer[2];
267
    len = (float)Math.sqrt(len);
268
    mBuffer[0] /= len;
269
    mBuffer[1] /= len;
270
    mBuffer[2] /= len;
267 271

  
268

  
269
    if( mBuffer[2]<0.0f )
270
      {
271
      mBuffer[0] *= -1.0f;
272
      mBuffer[1] *= -1.0f;
273
      mBuffer[2] *= -1.0f;
274
      }
272
//android.util.Log.e("D", " normal: "+mBuffer[0]+" "+mBuffer[1]+" "+mBuffer[2]);
275 273
    }
276 274

  
277 275
///////////////////////////////////////////////////////////////////////////////////////////////////
......
378 376

  
379 377
    computeNormalVector(vert3D,0,1,foundIndex);
380 378

  
379
    // rotate so that the normal vector becomes (0,0,1)
380
    float axisX, axisY, axisZ;
381

  
381 382
    if( mBuffer[0]!=0.0f || mBuffer[1]!=0.0f )
382 383
      {
383
      // rotate so that the normal vector becomes (0,0,1)
384
      float axisX = -mBuffer[1];
385
      float axisY =  mBuffer[0];
386
      float axisZ = 0.0f;
387

  
388
      float vecLen = mBuffer[0]*mBuffer[0] + mBuffer[1]*mBuffer[1] + mBuffer[2]*mBuffer[2];
389
      vecLen = (float)Math.sqrt(vecLen);
390
      mBuffer[0] /= vecLen;
391
      mBuffer[1] /= vecLen;
392
      mBuffer[2] /= vecLen;
384
      axisX = -mBuffer[1];
385
      axisY =  mBuffer[0];
386
      axisZ = 0.0f;
393 387

  
394 388
      float axiLen = axisX*axisX + axisY*axisY + axisZ*axisZ;
395 389
      axiLen = (float)Math.sqrt(axiLen);
396 390
      axisX /= axiLen;
397 391
      axisY /= axiLen;
398 392
      axisZ /= axiLen;
393
      }
394
    else
395
      {
396
      axisX = 0.0f;
397
      axisY = 1.0f;
398
      axisZ = 0.0f;
399
      }
399 400

  
400
      float cosTheta = mBuffer[2];
401
      //float sinTheta = axiLen / vecLen;
401
    float cosTheta = mBuffer[2];
402
  //float sinTheta = axiLen / vecLen;
402 403

  
403
      float sinHalfTheta = (float)Math.sqrt(0.5f*(1-cosTheta));
404
      float cosHalfTheta = (float)Math.sqrt(0.5f*(1+cosTheta));
404
    float sinHalfTheta = (float)Math.sqrt(0.5f*(1-cosTheta));
405
    float cosHalfTheta = (float)Math.sqrt(0.5f*(1+cosTheta));
405 406

  
406
      mQuat1[0] = axisX*sinHalfTheta;
407
      mQuat1[1] = axisY*sinHalfTheta;
408
      mQuat1[2] = axisZ*sinHalfTheta;
409
      mQuat1[3] = cosHalfTheta;
410
      mQuat2[0] = axisX*sinHalfTheta;
411
      mQuat2[1] = axisY*sinHalfTheta;
412
      mQuat2[2] = axisZ*sinHalfTheta;
413
      mQuat2[3] = -cosHalfTheta;
407
    mQuat1[0] = axisX*sinHalfTheta;
408
    mQuat1[1] = axisY*sinHalfTheta;
409
    mQuat1[2] = axisZ*sinHalfTheta;
410
    mQuat1[3] = cosHalfTheta;
411
    mQuat2[0] = axisX*sinHalfTheta;
412
    mQuat2[1] = axisY*sinHalfTheta;
413
    mQuat2[2] = axisZ*sinHalfTheta;
414
    mQuat2[3] = -cosHalfTheta;
414 415

  
415
      for (float[] vert : vert3D)
416
        {
417
        quatMultiply(mQuat1, vert, mQuat3);
418
        quatMultiply(mQuat3, mQuat2, vert);
419
        }
416
    for (float[] vert : vert3D)
417
      {
418
      quatMultiply(mQuat1, vert, mQuat3);
419
      quatMultiply(mQuat3, mQuat2, vert);
420 420
      }
421 421

  
422 422
    // fit the whole thing in a square and remember the scale & 2D vertices
......
594 594
      for(int previous=0; previous<face; previous++)
595 595
        {
596 596
        info = mFaceInfo.get(previous);
597
        if( tryFindingRotation(info,newInfo.vertices) ) break;
597
        if( tryFindingRotation(newInfo,info.vertices) )
598
          {
599
          android.util.Log.e("D", "comparing face "+face+" to "+previous+" SUCCESS!!");
600
          break;
601
          }
598 602
        }
599 603

  
600 604
      mFaceInfo.add(newInfo);
......
637 641
    for(int face=0; face<numFaces; face++)
638 642
      {
639 643
      info = mFaceInfo.get(face);
644

  
645
      android.util.Log.d("D", "--------------");
646
      printInfo(info);
647

  
640 648
      band = bands[bandIndexes[face]];
641 649
      bandsComputed = computeBands( band[0], (int)band[1], band[2], band[3], (int)band[4]);
642 650
      meshes[face] = new MeshPolygon(info.vertices,bandsComputed,(int)band[5],(int)band[6]);

Also available in: Unified diff