如何在Android OpenGL ES';OnDrawFrame';
我将尝试在当前“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){
@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);
}