如何在Android OpenGL ES';OnDrawFrame';

如何在Android OpenGL ES';OnDrawFrame';,android,arrays,opengl-es,Android,Arrays,Opengl Es,我将尝试在当前“OnDrawFrame”中绘制一个对象数组 @Override public void onDrawFrame(GL10 gl) { for(int i=0; i<objectArray.length; i++){ objectArray[i].draw(gl); } } } 上面类的对象数组的函数 public void setVertices(float[] vertice, short[] indice, int lineNumber){

我将尝试在当前“OnDrawFrame”中绘制一个对象数组

@Override
public void onDrawFrame(GL10 gl) {
for(int i=0; i<objectArray.length; i++){
     objectArray[i].draw(gl);
     }
}
}


上面类的对象数组的函数

public void setVertices(float[] vertice, short[] indice, int lineNumber){
    this.vertices = vertice;
    this.indices = indice;
    this.number = lineNumber;

 linetest[number] = new LINETEST();
 linetest[number].setVertices(vertices, indices);               
 linetest[number].setBuffer();

}

最后介绍了利用上述函数进行绘图的方法。它在renderer类中运行

@Override
public void onDrawFrame(GL10 gl) {

     int OBJL = 30;
     switch (OBJL){
     case 30:
         if(vertices != null){
             if(linetest[number] != null){
                for(int i = 0; i<number; i++){
                    linetest[number].draw(gl);
                }
                 linetest[number].draw(gl);
             }

         }else{
             break;
         }
    }
@覆盖
公共框架(GL10 gl){
int OBJL=30;
开关(OBJL){
案例30:
如果(顶点!=null){
if(linetest[number]!=null){

对于(int i=0;i您可以使用
glDrawArrays()
glDrawElements()
仅使用一个GL调用来渲染数组

参考资料:

例如:

// Vertices are stored in counter-clockwise order
float vertsCoords[] = {-1.0f, 1.0f, 0.0f, // V1
                        1.0f, 1.0f, 0.0f, // V2
                        0.0f, 0.0f, 0.0f, // V3
                    };

@Override
public void onDrawFrame(GL10 gl) {
    gl.glEnableClientState(GL10.GL_GL_VERTEX_ARRAY);
    gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertsCoords); // 3 components per vertex, float in size, from offset 0 at array 'vertsCoords'
    gl.glDrawArrays(GL10.GL_TRIANGLES, 0, 3); // draw 3 vertices
    gl.glDisableClientState(GL10.GL_GL_VERTEX_ARRAY);
}
这看起来可能有很多代码,但最终只发送4个GL调用,而不是本例中至少发送objectArray.length调用

如果您想进一步了解,可以查看顶点缓冲区对象:


请添加用于绘制每个对象的代码。我在一个类中创建了多个对象。但是,她在创建对象时通过生成一个随机顶点数组来表示,要绘制的位置是不同的。感谢您的回答flobo~但是,我不理解上面的代码。我创建了一个类来绘制代码中所示的图片然后,通过使用创建的类,您为该类的一个对象创建了一个多数组。我想知道的是,在创建为该对象数组的对象中,是否存在一个完整的draw函数。您已经输入了以下代码,以创建一个对象类数组,并以我在我不知道,如果,画。将附在身体上画一条线,我想让你检查一下,让你理解​​, 组成该类对象数组的代码。
// Vertices are stored in counter-clockwise order
float vertsCoords[] = {-1.0f, 1.0f, 0.0f, // V1
                        1.0f, 1.0f, 0.0f, // V2
                        0.0f, 0.0f, 0.0f, // V3
                    };

@Override
public void onDrawFrame(GL10 gl) {
    gl.glEnableClientState(GL10.GL_GL_VERTEX_ARRAY);
    gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertsCoords); // 3 components per vertex, float in size, from offset 0 at array 'vertsCoords'
    gl.glDrawArrays(GL10.GL_TRIANGLES, 0, 3); // draw 3 vertices
    gl.glDisableClientState(GL10.GL_GL_VERTEX_ARRAY);
}