2016-09-29 139 views
0

我移植一个C++点和多边形绘图Android.Initially它使用glBufferSubData和glMultiDrawArrays直视着将代码移植到Java style.I可以使用下面的代码画点。在OpenGL ES的Android

//POINT 
public class MyPoint 
{ 

public float x,y,z; 

} 
//Points in x,y,z format are parsed and stored here 
public static ArrayList<MyPoint> m_vPoints; 


public static float [] fPointVertices ={};//Float array 
public static FloatBuffer mPointVerticesFloatBuffer;//Buffer for rendering 

int m_drawCount=0; 

//Converting to float array 
//AND 
//Converting to FloatBuffer 
public static void FormatPointDataAsGLBuffer() 
{ 
     fPointVertices=new float[m_vPoints.size()*3]; 
     int count=0; 

     for(int i=0;i<m_vPoints.size();i++) 
     { 
      fPointVertices[count]=m_vPoints.get(i).x; 
      fPointVertices[count+1]=0.0f; 
      fPointVertices[count+2]=m_vPoints.get(i).y; 
      count=count+3; 
     } 

     m_drawCount=count; 
     //Convert vertices to OpenGL ES compatible format 
     mPointVerticesFloatBuffer= ByteBuffer.allocateDirect(fPointVertices.length * 4).order(ByteOrder.nativeOrder()).asFloatBuffer(); 
     mPointVerticesFloatBuffer.put(fPointVertices).position(0); 
} 

public void DrawPoints() 
{ 
    GLES20.glEnableVertexAttribArray(mPositionHandle); 
    GLES20.glVertexAttribPointer(mPositionHandle, COORDS_PER_VERTEX, GLES20.GL_FLOAT, false, 0, mPointVerticesFloatBuffer); 
    GLES20.glDrawArrays(GLES20.GL_POINTS, 0, m_drawCount); 
    GLES20.glDisableVertexAttribArray(mPositionHandle); 

} 

我还不知道如何与一个浮点array.In C++版本绘制多边形虽然使用glBufferSubData创建VBO且如下SE查询描述使用单一呼叫glMultiDrawArrays。 Using VBO to draw line string

多边形相关的脚本看起来像下面

//POLYGON 

public static ArrayList<MyPolygon> m_vPolygons; 
public static class MyPolygon 
    { 
     public ArrayList<MyPoint> vPointList; 
    } 


public static void FormatPolygonDataAsGLBuffer() 
    { 
     for(int i=0;i<vPolygons.size();i++) 
     { 

      for(int j=0;j<vPolygons.get(i).vPointList.size();j++) 
      { 
       fPointVertices[count]=vPolygons.get(i).vPointList.get(i).x; 
       fPointVertices[count+1]=0.0f; 
       fPointVertices[count+2]=-vPolygons.get(i).vPointList.get(i).y;//Negating since y is outwards from the screen and z is upwards 
       count=count+3; 
      } 

     } 
    } 


    public void DrawPolygons() 
    { 
     //WHAT IS THE RIGHT WAY HERE??? 
     //glBufferSubData 
     //Draw the lines 
     //glMultiDrawArrays(GLES20.GL_LINE_LOOP, startIndices,endIndices,nPolygonCount); 
    } 

回答

1

glBufferSubData功能仍然存在,所以应该依旧如故工作完全。该glMultiDrawArrays功能不会GLES存在,所以你只需要进行多次单独调用glDrawArrays(),每个对象要渲染。