Project

General

Profile

« Previous | Next » 

Revision 6f2d931d

Added by Leszek Koltunski over 5 years ago

Added a new attribute to vertices of a MeshBase object: the vec3 'inflate' vector.
This vector describes the direction where the vertex needs to be moved when we 'inflate' the whole mesh.
If the mesh is locally smooth, this is simply the normal vector; otherwise (for example in the corners of the MeshCubes) - not.

Currently the new attribute is always set to (1,0,0) and not used yet.

View differences:

src/main/java/org/distorted/library/mesh/MeshBase.java
39 39
 */
40 40
public abstract class MeshBase
41 41
   {
42
   static final int POS_DATA_SIZE= 3;
43
   static final int NOR_DATA_SIZE= 3;
44
   static final int TEX_DATA_SIZE= 2;
42
   private static final int POS_DATA_SIZE= 3;
43
   private static final int NOR_DATA_SIZE= 3;
44
   private static final int INF_DATA_SIZE= 3;
45
   private static final int TEX_DATA_SIZE= 2;
46

  
47
   static final int POS_ATTRIB   = 0;
48
   static final int NOR_ATTRIB   = POS_DATA_SIZE;
49
   static final int INF_ATTRIB   = POS_DATA_SIZE + NOR_DATA_SIZE;
50
   static final int TEX_ATTRIB   = POS_DATA_SIZE + NOR_DATA_SIZE + INF_DATA_SIZE;
51
   static final int VERT_ATTRIBS = POS_DATA_SIZE + NOR_DATA_SIZE + INF_DATA_SIZE + TEX_DATA_SIZE;
45 52

  
46 53
   private static final int BYTES_PER_FLOAT = 4;
47 54

  
48
   private static final int OFFSET_POS =                                                        0;
49
   private static final int OFFSET_NOR = (POS_DATA_SIZE                         )*BYTES_PER_FLOAT;
50
   private static final int OFFSET_TEX = (POS_DATA_SIZE+NOR_DATA_SIZE           )*BYTES_PER_FLOAT;
55
   private static final int OFFSET_POS = POS_ATTRIB*BYTES_PER_FLOAT;
56
   private static final int OFFSET_NOR = NOR_ATTRIB*BYTES_PER_FLOAT;
57
   private static final int OFFSET_INF = INF_ATTRIB*BYTES_PER_FLOAT;
58
   private static final int OFFSET_TEX = TEX_ATTRIB*BYTES_PER_FLOAT;
51 59

  
52
   private static final int TFSIZE  = (POS_DATA_SIZE+POS_DATA_SIZE              )*BYTES_PER_FLOAT;
53
   private static final int VERTSIZE= (POS_DATA_SIZE+NOR_DATA_SIZE+TEX_DATA_SIZE)*BYTES_PER_FLOAT;
60
   private static final int TFSIZE  = (POS_DATA_SIZE+POS_DATA_SIZE                            )*BYTES_PER_FLOAT;
61
   private static final int VERTSIZE= (POS_DATA_SIZE+NOR_DATA_SIZE+INF_DATA_SIZE+TEX_DATA_SIZE)*BYTES_PER_FLOAT;
54 62

  
55 63
   private boolean mShowNormals;       // when rendering this mesh, draw normal vectors?
56 64
   private DistortedBuffer mVBO, mTFO; // main vertex buffer and transform feedback buffer
......
128 136
     GLES31.glBindBuffer(GLES31.GL_ARRAY_BUFFER, mVBO.mIndex[0] );
129 137
     GLES31.glVertexAttribPointer(program.mAttribute[0], MeshBase.POS_DATA_SIZE, GLES31.GL_FLOAT, false, MeshBase.VERTSIZE, MeshBase.OFFSET_POS);
130 138
     GLES31.glVertexAttribPointer(program.mAttribute[1], MeshBase.NOR_DATA_SIZE, GLES31.GL_FLOAT, false, MeshBase.VERTSIZE, MeshBase.OFFSET_NOR);
131
     GLES31.glVertexAttribPointer(program.mAttribute[2], MeshBase.TEX_DATA_SIZE, GLES31.GL_FLOAT, false, MeshBase.VERTSIZE, MeshBase.OFFSET_TEX);
139
     GLES31.glVertexAttribPointer(program.mAttribute[2], MeshBase.INF_DATA_SIZE, GLES31.GL_FLOAT, false, MeshBase.VERTSIZE, MeshBase.OFFSET_INF);
140
     GLES31.glVertexAttribPointer(program.mAttribute[3], MeshBase.TEX_DATA_SIZE, GLES31.GL_FLOAT, false, MeshBase.VERTSIZE, MeshBase.OFFSET_TEX);
132 141
     GLES31.glBindBuffer(GLES31.GL_ARRAY_BUFFER, 0);
133 142
     }
134 143

  
src/main/java/org/distorted/library/mesh/MeshCubes.java
461 461
     return vertex;
462 462
     }
463 463

  
464
///////////////////////////////////////////////////////////////////////////////////////////////////
465

  
466
  private int repeatLast(int vertex, float[] attribs)
467
     {
468
     //android.util.Log.e("CUBES", "repeating last vertex!");
469

  
470
     if( vertex>0 )
471
       {
472
       remainingVert--;
473

  
474
       attribs[8*vertex  ] = attribs[8*vertex-8];
475
       attribs[8*vertex+1] = attribs[8*vertex-7];
476
       attribs[8*vertex+2] = attribs[8*vertex-6];
477
       attribs[8*vertex+3] = attribs[8*vertex-5];
478
       attribs[8*vertex+4] = attribs[8*vertex-4];
479
       attribs[8*vertex+5] = attribs[8*vertex-3];
480
       attribs[8*vertex+6] = attribs[8*vertex-2];
481
       attribs[8*vertex+7] = attribs[8*vertex-1];
482
         
483
       vertex++;     
484
       }
485
     
486
     return vertex;
487
     }
488
   
489 464
///////////////////////////////////////////////////////////////////////////////////////////////////
490 465

  
491 466
  private int buildSideGrid(int vertex, float[] attribs)
......
607 582
     float x = (float)col/mCols;
608 583
     float y = (float)row/mRows;
609 584

  
610
     attribs[8*vertex  ] = x-0.5f;
611
     attribs[8*vertex+1] = 0.5f-y;
612
     attribs[8*vertex+2] = vectZ;
613
     attribs[8*vertex+3] = mNormalX[index];
614
     attribs[8*vertex+4] = mNormalY[index];
615
     attribs[8*vertex+5] = mNormalZ[index];
616
     attribs[8*vertex+6] = x;
617
     attribs[8*vertex+7] = 1.0f-y;
585
     attribs[VERT_ATTRIBS*vertex + POS_ATTRIB  ] = x-0.5f;
586
     attribs[VERT_ATTRIBS*vertex + POS_ATTRIB+1] = 0.5f-y;
587
     attribs[VERT_ATTRIBS*vertex + POS_ATTRIB+2] = vectZ;
588

  
589
     attribs[VERT_ATTRIBS*vertex + NOR_ATTRIB  ] = mNormalX[index];
590
     attribs[VERT_ATTRIBS*vertex + NOR_ATTRIB+1] = mNormalY[index];
591
     attribs[VERT_ATTRIBS*vertex + NOR_ATTRIB+2] = mNormalZ[index];
592

  
593
     attribs[VERT_ATTRIBS*vertex + INF_ATTRIB  ] = 1.0f;  //
594
     attribs[VERT_ATTRIBS*vertex + INF_ATTRIB+1] = 0.0f;  // TODO
595
     attribs[VERT_ATTRIBS*vertex + INF_ATTRIB+2] = 0.0f;  //
596

  
597
     attribs[VERT_ATTRIBS*vertex + TEX_ATTRIB  ] = x;
598
     attribs[VERT_ATTRIBS*vertex + TEX_ATTRIB+1] = 1.0f-y;
618 599

  
619 600
     return vertex+1;
620 601
     }
......
633 614
       {
634 615
       case NORTH: x = (float)(back ? (curr.col  ):(curr.col+1))/mCols;
635 616

  
636
                   attribs[8*vertex  ] = x - 0.5f;
637
                   attribs[8*vertex+1] = 0.5f - (float)curr.row/mRows;
638
                   attribs[8*vertex+2] = 0.5f - (float)slice/mSlices;
639
                   attribs[8*vertex+3] = side==NORTH ? 0.0f : (side==WEST?-R:R);
640
                   attribs[8*vertex+4] = 1.0f;
641
                   attribs[8*vertex+5] = (slice==0 ? R : (slice==mSlices ? -R:0) );
642
                   attribs[8*vertex+6] = x;
643
                   attribs[8*vertex+7] = 1.0f-(float)(curr.row-slice)/mRows;
617
                   attribs[VERT_ATTRIBS*vertex + POS_ATTRIB  ] = x - 0.5f;
618
                   attribs[VERT_ATTRIBS*vertex + POS_ATTRIB+1] = 0.5f - (float)curr.row/mRows;
619
                   attribs[VERT_ATTRIBS*vertex + POS_ATTRIB+2] = 0.5f - (float)slice/mSlices;
620

  
621
                   attribs[VERT_ATTRIBS*vertex + NOR_ATTRIB  ] = side==NORTH ? 0.0f : (side==WEST?-R:R);
622
                   attribs[VERT_ATTRIBS*vertex + NOR_ATTRIB+1] = 1.0f;
623
                   attribs[VERT_ATTRIBS*vertex + NOR_ATTRIB+2] = (slice==0 ? R : (slice==mSlices ? -R:0) );
624

  
625
                   attribs[VERT_ATTRIBS*vertex + INF_ATTRIB  ] = 1.0f;  //
626
                   attribs[VERT_ATTRIBS*vertex + INF_ATTRIB+1] = 0.0f;  // TODO
627
                   attribs[VERT_ATTRIBS*vertex + INF_ATTRIB+2] = 0.0f;  //
628

  
629
                   attribs[VERT_ATTRIBS*vertex + TEX_ATTRIB  ] = x;
630
                   attribs[VERT_ATTRIBS*vertex + TEX_ATTRIB+1] = 1.0f-(float)(curr.row-slice)/mRows;
644 631
                   break;
645 632
       case SOUTH: x = (float)(back ? (curr.col+1):(curr.col  ))/mCols;
646 633

  
647
                   attribs[8*vertex  ] = x - 0.5f;
648
                   attribs[8*vertex+1] = 0.5f - (float)(curr.row+1)/mRows;
649
                   attribs[8*vertex+2] = 0.5f - (float)slice/mSlices;
650
                   attribs[8*vertex+3] = side==SOUTH ? 0.0f: (side==EAST?-R:R);
651
                   attribs[8*vertex+4] =-1.0f;
652
                   attribs[8*vertex+5] = (slice==0 ? R : (slice==mSlices ? -R:0) );
653
                   attribs[8*vertex+6] = x;
654
                   attribs[8*vertex+7] = 1.0f - (float)(curr.row+1+slice)/mRows;
634
                   attribs[VERT_ATTRIBS*vertex + POS_ATTRIB  ] = x - 0.5f;
635
                   attribs[VERT_ATTRIBS*vertex + POS_ATTRIB+1] = 0.5f - (float)(curr.row+1)/mRows;
636
                   attribs[VERT_ATTRIBS*vertex + POS_ATTRIB+2] = 0.5f - (float)slice/mSlices;
637

  
638
                   attribs[VERT_ATTRIBS*vertex + NOR_ATTRIB  ] = side==SOUTH ? 0.0f: (side==EAST?-R:R);
639
                   attribs[VERT_ATTRIBS*vertex + NOR_ATTRIB+1] =-1.0f;
640
                   attribs[VERT_ATTRIBS*vertex + NOR_ATTRIB+2] = (slice==0 ? R : (slice==mSlices ? -R:0) );
641

  
642
                   attribs[VERT_ATTRIBS*vertex + INF_ATTRIB  ] = 1.0f;  //
643
                   attribs[VERT_ATTRIBS*vertex + INF_ATTRIB+1] = 0.0f;  // TODO
644
                   attribs[VERT_ATTRIBS*vertex + INF_ATTRIB+2] = 0.0f;  //
645

  
646
                   attribs[VERT_ATTRIBS*vertex + TEX_ATTRIB  ] = x;
647
                   attribs[VERT_ATTRIBS*vertex + TEX_ATTRIB+1] = 1.0f - (float)(curr.row+1+slice)/mRows;
655 648
                   break;
656 649
       case WEST : y = (float)(back  ? (curr.row+1):(curr.row))/mRows;
657 650

  
658
                   attribs[8*vertex  ] = (float)curr.col/mCols -0.5f;
659
                   attribs[8*vertex+1] = 0.5f - y;
660
                   attribs[8*vertex+2] = 0.5f - (float)slice/mSlices;
661
                   attribs[8*vertex+3] =-1.0f;
662
                   attribs[8*vertex+4] = side==WEST ? 0.0f : (side==NORTH?-R:R);
663
                   attribs[8*vertex+5] = (slice==0 ? R : (slice==mSlices ? -R:0) );
664
                   attribs[8*vertex+6] = (float)(curr.col-slice)/mCols;
665
                   attribs[8*vertex+7] = 1.0f - y;
651
                   attribs[VERT_ATTRIBS*vertex + POS_ATTRIB  ] = (float)curr.col/mCols -0.5f;
652
                   attribs[VERT_ATTRIBS*vertex + POS_ATTRIB+1] = 0.5f - y;
653
                   attribs[VERT_ATTRIBS*vertex + POS_ATTRIB+2] = 0.5f - (float)slice/mSlices;
654

  
655
                   attribs[VERT_ATTRIBS*vertex + NOR_ATTRIB  ] =-1.0f;
656
                   attribs[VERT_ATTRIBS*vertex + NOR_ATTRIB+1] = side==WEST ? 0.0f : (side==NORTH?-R:R);
657
                   attribs[VERT_ATTRIBS*vertex + NOR_ATTRIB+2] = (slice==0 ? R : (slice==mSlices ? -R:0) );
658

  
659
                   attribs[VERT_ATTRIBS*vertex + INF_ATTRIB  ] = 1.0f;  //
660
                   attribs[VERT_ATTRIBS*vertex + INF_ATTRIB+1] = 0.0f;  // TODO
661
                   attribs[VERT_ATTRIBS*vertex + INF_ATTRIB+2] = 0.0f;  //
662

  
663
                   attribs[VERT_ATTRIBS*vertex + TEX_ATTRIB  ] = (float)(curr.col-slice)/mCols;
664
                   attribs[VERT_ATTRIBS*vertex + TEX_ATTRIB+1] = 1.0f - y;
666 665
                   break;
667 666
       case EAST : y = (float)(back  ? (curr.row):(curr.row+1))/mRows;
668 667

  
669
                   attribs[8*vertex  ] = (float)(curr.col+1)/mCols -0.5f;
670
                   attribs[8*vertex+1] = 0.5f - y;
671
                   attribs[8*vertex+2] = 0.5f - (float)slice/mSlices;
672
                   attribs[8*vertex+3] = 1.0f;
673
                   attribs[8*vertex+4] = side==EAST ? 0.0f : (side==SOUTH?-R:R);
674
                   attribs[8*vertex+5] = (slice==0 ? R : (slice==mSlices ? -R:0) );
675
                   attribs[8*vertex+6] = (float)(curr.col+1+slice)/mCols;
676
                   attribs[8*vertex+7] = 1.0f - y;
668
                   attribs[VERT_ATTRIBS*vertex + POS_ATTRIB  ] = (float)(curr.col+1)/mCols -0.5f;
669
                   attribs[VERT_ATTRIBS*vertex + POS_ATTRIB+1] = 0.5f - y;
670
                   attribs[VERT_ATTRIBS*vertex + POS_ATTRIB+2] = 0.5f - (float)slice/mSlices;
671

  
672
                   attribs[VERT_ATTRIBS*vertex + NOR_ATTRIB  ] = 1.0f;
673
                   attribs[VERT_ATTRIBS*vertex + NOR_ATTRIB+1] = side==EAST ? 0.0f : (side==SOUTH?-R:R);
674
                   attribs[VERT_ATTRIBS*vertex + NOR_ATTRIB+2] = (slice==0 ? R : (slice==mSlices ? -R:0) );
675

  
676
                   attribs[VERT_ATTRIBS*vertex + INF_ATTRIB  ] = 1.0f;  //
677
                   attribs[VERT_ATTRIBS*vertex + INF_ATTRIB+1] = 0.0f;  // TODO
678
                   attribs[VERT_ATTRIBS*vertex + INF_ATTRIB+2] = 0.0f;  //
679

  
680
                   attribs[VERT_ATTRIBS*vertex + TEX_ATTRIB  ] = (float)(curr.col+1+slice)/mCols;
681
                   attribs[VERT_ATTRIBS*vertex + TEX_ATTRIB+1] = 1.0f - y;
677 682
                   break;
678 683
       }
679
     
680
     if(attribs[8*vertex+6]>1.0f) attribs[8*vertex+6] = 2.0f-attribs[8*vertex+6];
681
     if(attribs[8*vertex+6]<0.0f) attribs[8*vertex+6] =     -attribs[8*vertex+6];
682
     if(attribs[8*vertex+7]>1.0f) attribs[8*vertex+7] = 2.0f-attribs[8*vertex+7];
683
     if(attribs[8*vertex+7]<0.0f) attribs[8*vertex+7] =     -attribs[8*vertex+7];
684

  
685
     float tex0 =  attribs[VERT_ATTRIBS*vertex + TEX_ATTRIB  ];
686
     float tex1 =  attribs[VERT_ATTRIBS*vertex + TEX_ATTRIB+1];
687

  
688
     if(tex0>1.0f) attribs[VERT_ATTRIBS*vertex + TEX_ATTRIB  ] = 2.0f-tex0;
689
     if(tex0<0.0f) attribs[VERT_ATTRIBS*vertex + TEX_ATTRIB  ] =     -tex0;
690
     if(tex1>1.0f) attribs[VERT_ATTRIBS*vertex + TEX_ATTRIB+1] = 2.0f-tex1;
691
     if(tex1<0.0f) attribs[VERT_ATTRIBS*vertex + TEX_ATTRIB+1] =     -tex1;
692
     }
693

  
694
///////////////////////////////////////////////////////////////////////////////////////////////////
695

  
696
   private int repeatLast(int vertex, float[] attribs)
697
     {
698
     //android.util.Log.e("CUBES", "repeating last vertex!");
699

  
700
     if( vertex>0 )
701
       {
702
       remainingVert--;
703

  
704
       attribs[VERT_ATTRIBS*vertex + POS_ATTRIB  ] = attribs[VERT_ATTRIBS*(vertex-1) + POS_ATTRIB  ];
705
       attribs[VERT_ATTRIBS*vertex + POS_ATTRIB+1] = attribs[VERT_ATTRIBS*(vertex-1) + POS_ATTRIB+1];
706
       attribs[VERT_ATTRIBS*vertex + POS_ATTRIB+2] = attribs[VERT_ATTRIBS*(vertex-1) + POS_ATTRIB+2];
707

  
708
       attribs[VERT_ATTRIBS*vertex + NOR_ATTRIB  ] = attribs[VERT_ATTRIBS*(vertex-1) + NOR_ATTRIB  ];
709
       attribs[VERT_ATTRIBS*vertex + NOR_ATTRIB+1] = attribs[VERT_ATTRIBS*(vertex-1) + NOR_ATTRIB+1];
710
       attribs[VERT_ATTRIBS*vertex + NOR_ATTRIB+2] = attribs[VERT_ATTRIBS*(vertex-1) + NOR_ATTRIB+2];
711

  
712
       attribs[VERT_ATTRIBS*vertex + INF_ATTRIB  ] = attribs[VERT_ATTRIBS*(vertex-1) + INF_ATTRIB  ];
713
       attribs[VERT_ATTRIBS*vertex + INF_ATTRIB+1] = attribs[VERT_ATTRIBS*(vertex-1) + INF_ATTRIB+1];
714
       attribs[VERT_ATTRIBS*vertex + INF_ATTRIB+2] = attribs[VERT_ATTRIBS*(vertex-1) + INF_ATTRIB+2];
715

  
716
       attribs[VERT_ATTRIBS*vertex + TEX_ATTRIB  ] = attribs[VERT_ATTRIBS*(vertex-1) + TEX_ATTRIB  ];
717
       attribs[VERT_ATTRIBS*vertex + TEX_ATTRIB+1] = attribs[VERT_ATTRIBS*(vertex-1) + TEX_ATTRIB+1];
718

  
719

  
720
       vertex++;
721
       }
722

  
723
     return vertex;
684 724
     }
685 725

  
686 726
///////////////////////////////////////////////////////////////////////////////////////////////////
......
688 728
  private void build()
689 729
     {
690 730
     int vertSoFar=0;
691
     float[] attribs= new float[(POS_DATA_SIZE+NOR_DATA_SIZE+TEX_DATA_SIZE)*numVertices];
731
     float[] attribs= new float[VERT_ATTRIBS*numVertices];
692 732

  
693 733
     vertSoFar = buildFrontBackGrid(true, vertSoFar,attribs);
694 734

  
src/main/java/org/distorted/library/mesh/MeshFlat.java
62 62
     {
63 63
     remainingVert--;
64 64

  
65
     attribs[8*vertex  ] = x-0.5f;
66
     attribs[8*vertex+1] = 0.5f-y;
67
     attribs[8*vertex+2] = 0;
65
     attribs[VERT_ATTRIBS*vertex + POS_ATTRIB  ] = x-0.5f;
66
     attribs[VERT_ATTRIBS*vertex + POS_ATTRIB+1] = 0.5f-y;
67
     attribs[VERT_ATTRIBS*vertex + POS_ATTRIB+2] = 0;
68 68

  
69
     attribs[8*vertex+3] = 0.0f;
70
     attribs[8*vertex+4] = 0.0f;
71
     attribs[8*vertex+5] = 1.0f;
69
     attribs[VERT_ATTRIBS*vertex + NOR_ATTRIB  ] = 0.0f;
70
     attribs[VERT_ATTRIBS*vertex + NOR_ATTRIB+1] = 0.0f;
71
     attribs[VERT_ATTRIBS*vertex + NOR_ATTRIB+2] = 1.0f;
72 72

  
73
     attribs[8*vertex+6] = x;
74
     attribs[8*vertex+7] = 1.0f-y;
73
     attribs[VERT_ATTRIBS*vertex + INF_ATTRIB  ] = 1.0f;  //
74
     attribs[VERT_ATTRIBS*vertex + INF_ATTRIB+1] = 0.0f;  // TODO
75
     attribs[VERT_ATTRIBS*vertex + INF_ATTRIB+2] = 0.0f;  //
76

  
77
     attribs[VERT_ATTRIBS*vertex + TEX_ATTRIB  ] = x;
78
     attribs[VERT_ATTRIBS*vertex + TEX_ATTRIB+1] = 1.0f-y;
75 79

  
76 80
     return vertex+1;
77 81
     }
......
80 84

  
81 85
  private int repeatLast(int vertex, float[] attribs)
82 86
     {
83
     remainingVert--;
84

  
85 87
     //android.util.Log.e("MeshFlat", "repeating last vertex!");
86 88

  
87 89
     if( vertex>0 )
88 90
       {
89
       attribs[8*vertex  ] = attribs[8*vertex-8];
90
       attribs[8*vertex+1] = attribs[8*vertex-7];
91
       attribs[8*vertex+2] = attribs[8*vertex-6];
92
       attribs[8*vertex+3] = attribs[8*vertex-5];
93
       attribs[8*vertex+4] = attribs[8*vertex-4];
94
       attribs[8*vertex+5] = attribs[8*vertex-3];
95
       attribs[8*vertex+6] = attribs[8*vertex-2];
96
       attribs[8*vertex+7] = attribs[8*vertex-1];
91
       remainingVert--;
92

  
93
       attribs[VERT_ATTRIBS*vertex + POS_ATTRIB  ] = attribs[VERT_ATTRIBS*(vertex-1) + POS_ATTRIB  ];
94
       attribs[VERT_ATTRIBS*vertex + POS_ATTRIB+1] = attribs[VERT_ATTRIBS*(vertex-1) + POS_ATTRIB+1];
95
       attribs[VERT_ATTRIBS*vertex + POS_ATTRIB+2] = attribs[VERT_ATTRIBS*(vertex-1) + POS_ATTRIB+2];
96

  
97
       attribs[VERT_ATTRIBS*vertex + NOR_ATTRIB  ] = attribs[VERT_ATTRIBS*(vertex-1) + NOR_ATTRIB  ];
98
       attribs[VERT_ATTRIBS*vertex + NOR_ATTRIB+1] = attribs[VERT_ATTRIBS*(vertex-1) + NOR_ATTRIB+1];
99
       attribs[VERT_ATTRIBS*vertex + NOR_ATTRIB+2] = attribs[VERT_ATTRIBS*(vertex-1) + NOR_ATTRIB+2];
100

  
101
       attribs[VERT_ATTRIBS*vertex + INF_ATTRIB  ] = attribs[VERT_ATTRIBS*(vertex-1) + INF_ATTRIB  ];
102
       attribs[VERT_ATTRIBS*vertex + INF_ATTRIB+1] = attribs[VERT_ATTRIBS*(vertex-1) + INF_ATTRIB+1];
103
       attribs[VERT_ATTRIBS*vertex + INF_ATTRIB+2] = attribs[VERT_ATTRIBS*(vertex-1) + INF_ATTRIB+2];
104

  
105
       attribs[VERT_ATTRIBS*vertex + TEX_ATTRIB  ] = attribs[VERT_ATTRIBS*(vertex-1) + TEX_ATTRIB  ];
106
       attribs[VERT_ATTRIBS*vertex + TEX_ATTRIB+1] = attribs[VERT_ATTRIBS*(vertex-1) + TEX_ATTRIB+1];
97 107

  
98 108
       vertex++;
99 109
       }
......
176 186
    super(0.0f);
177 187
    computeNumberOfVertices(cols,rows);
178 188

  
179
    float[] attribs= new float[(POS_DATA_SIZE+NOR_DATA_SIZE+TEX_DATA_SIZE)*numVertices];
189
    float[] attribs= new float[VERT_ATTRIBS*numVertices];
180 190

  
181 191
    buildGrid(attribs);
182 192

  
183 193
    //android.util.Log.e("MeshFlat", "dataLen="+numVertices);
184
    //android.util.Log.d("MeshFlat", "attribs: "+debug(attribs,8) );
194
    //android.util.Log.d("MeshFlat", "attribs: "+debug(attribs,VERT_ATTRIBS) );
185 195

  
186 196
    if( remainingVert!=0 )
187 197
      android.util.Log.d("MeshFlat", "remainingVert " +remainingVert );
src/main/res/raw/main_vertex_shader.glsl
22 22

  
23 23
in vec3 a_Position;                  // Per-vertex position.
24 24
in vec3 a_Normal;                    // Per-vertex normal vector.
25
in vec3 a_Inflate;                   // This vector describes the direction this vertex needs to go when we 'inflate' the whole mesh.
26
                                     // If the mesh is locally smooth, this is equal to the normal vector. Otherwise (on sharp edges) - no.
25 27
in vec2 a_TexCoordinate;             // Per-vertex texture coordinate.
28

  
26 29
out vec3 v_Position;                 //
27 30
out vec3 v_endPosition;              // for Transform Feedback only
28 31
out vec3 v_Normal;                   //

Also available in: Unified diff