title: OpenGL ES2 : Vertex Indices and Texture coordinates?
body: <p>I am using Vertex Indices to render my mesh.I have no problem passing vertex-indices and vertex positions.</p>
  
  <p>But I am wondering in the case of texture coordinates,should I pass them them using Indices too?</p>
  
  <p><strong>Edit :</strong> I am trying to pass and render OBJ file and confused on how to handle texture coordinates described in "f x/y/z"</p>
  
  <p>For example in the case of a Cube I pass my vertex coordinates :</p>
  
  <p>*8 Vertex coords </p>
  
  <p>*36 Vertex Indices:</p>
  
  <p>When passing textures(or even normals) should I pass them as:</p>
  
  <p>*<em>(8 texture coords+36 texture coordinate indices)</em>. 
  If so, how to assign them during render ?</p>
  
  <p><strong>or</strong> </p>
  
  <p>*<em>(36 texture coordinates)</em> ?</p>
  
  <p>This is my abstract mesh class,</p>
  
  <pre><code>public class AbstractMesh3D {
      //private int buffers[]={0,0};
      private int vbVertices[]=new int[1];
      private int vbIndices[]=new int[1];
      private int vbNormals[]=new int[1];
      private int vbColors[]=new int[1];
      private int vbTextureCords[]=new int[1];
      private boolean bVertices=false;
      private boolean bIndices=false;
      private boolean bNormals=false;
      private int numOfVertices;
      private int numOfIndices;
      private int numOfNormals;
      private World3D _world;
      private String textureId;
  
      public void setTextureId(String textureId) {
          this.textureId = textureId;
      }
  
  
  
  
      public AbstractMesh3D(){
  
  
      }
      public void setWorld(World3D world){
          this._world=world;
      }
      public void setVertexBuffer(float vertexData[]){
          GLES20.glGenBuffers(1, vbVertices, 0);
          //Short
          FloatBuffer vertexFloatBuffer=ByteBuffer.allocateDirect(vertexData.length*4).order(ByteOrder.nativeOrder()).asFloatBuffer();
          vertexFloatBuffer.put(vertexData);
          vertexFloatBuffer.position(0);
  
          //GLES20.glGenBuffers(1, vbVertices, 0);
          GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, vbVertices[0]);
          GLES20.glBufferData(GLES20.GL_ARRAY_BUFFER, vertexData.length*4, vertexFloatBuffer, GLES20.GL_STATIC_DRAW);
          numOfVertices=vertexData.length/3;
          bVertices=true;
  
          GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, 0);
          GLES20.glBindBuffer(GLES20.GL_ELEMENT_ARRAY_BUFFER, 0);
  
  
          //vertexFloatBuffer.
      }
  
      public void setNormalBuffer(float normalData[]){
          GLES20.glGenBuffers(1, vbNormals, 0);
          //Short
          FloatBuffer vertexFloatBuffer=ByteBuffer.allocateDirect(normalData.length*4).order(ByteOrder.nativeOrder()).asFloatBuffer();
          vertexFloatBuffer.put(normalData);
          vertexFloatBuffer.position(0);
  
          GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, vbNormals[0]);
          GLES20.glBufferData(GLES20.GL_ARRAY_BUFFER, normalData.length*4, vertexFloatBuffer, GLES20.GL_STATIC_DRAW);
          bNormals=true;
          numOfNormals=normalData.length/3;
  
          GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, 0);
          GLES20.glBindBuffer(GLES20.GL_ELEMENT_ARRAY_BUFFER, 0);
  
      }
  
      public void setIndices(short indices[]){
          GLES20.glGenBuffers(1, vbIndices, 0);
          ShortBuffer vertexFloatBuffer=ByteBuffer.allocateDirect(indices.length*2).order(ByteOrder.nativeOrder()).asShortBuffer();
          vertexFloatBuffer.put(indices);
          vertexFloatBuffer.position(0);
  
          //GLES20.glGenBuffers(1, buffers[1], 0);
          GLES20.glBindBuffer(GLES20.GL_ELEMENT_ARRAY_BUFFER, vbIndices[0]);
          GLES20.glBufferData(GLES20.GL_ELEMENT_ARRAY_BUFFER, indices.length*2, vertexFloatBuffer, GLES20.GL_STATIC_DRAW);
          numOfIndices=indices.length;
          bIndices=true;
  
          GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, 0);
          GLES20.glBindBuffer(GLES20.GL_ELEMENT_ARRAY_BUFFER, 0);
  
      }
  
      public void render(){
          int posHandle=_world.getOgl_aPositionHandle();
          int normalHandle=_world.getOgl_aNormalHandle();
  
          GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, vbVertices[0]);
          GLES20.glEnableVertexAttribArray(posHandle);
          GLES20.glVertexAttribPointer(posHandle, 3, GLES20.GL_FLOAT, false, 12, 0);
  
          if(bNormals){
              GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, vbNormals[0]);
              GLES20.glEnableVertexAttribArray(normalHandle);
              GLES20.glVertexAttribPointer(normalHandle, 3, GLES20.GL_FLOAT, false, 12, 0);
          }
  
          if(bIndices){   
              //System.out.println("render indices");
              GLES20.glBindBuffer(GLES20.GL_ELEMENT_ARRAY_BUFFER, vbIndices[0]);
  
              GLES20.glDrawElements(GLES20.GL_TRIANGLES, numOfIndices, GLES20.GL_UNSIGNED_SHORT, 0);          
  
          }else{
              GLES20.glDrawArrays(GLES20.GL_TRIANGLES, 0, numOfVertices);
          }
          GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, 0);
          GLES20.glBindBuffer(GLES20.GL_ELEMENT_ARRAY_BUFFER, 0);
  
          GLES20.glDisableVertexAttribArray(posHandle);
          GLES20.glDisableVertexAttribArray(normalHandle);
          //System.out.println("rendered");
  
  
  
  
  
      }
  
  }
  </code></pre>