android是用OpenGL来实现3d的。OpenGL的处理机制是把所有的数据都用代码传递给opengl service,如果用户(这里是应用程序)想要画什么东西,就用告诉opengl 什么东西是可用的,然后在开始画。
这个例子一共分三步:
1."画"一个3d的图形(这里画的是菱形),把它传递给opengl service 端,然后建立一个画自己的方法。
2.创建这个图形运行的环境。
3.把这个环境,加载到android 的界面上去。
下面是具体的实现方法:
首先需要建两个array,第一array是用来告诉opengl这个图形有哪些顶点:
画一个三维的坐标轴,然后把你要画的点都算出来,然后放在这个array里。
float l=1.5f;
float[] vertex={
0.0f,l,0.0f,
l,0.0f,0.0f,
0.0f,0.0f,l,
-l,0.0f,0.0f,
0.0f,0.0f,-l,
0.0f,-l,0.0f
};
第二个array是告诉opengl 你要怎样组织这些点:
这里我要画三角形,所以每三个点是一组。
byte[] edge=
{
0,1,2,
1,2,5,
0,2,3,
5,2,3,
0,3,4,
5,3,4,
0,4,1,
5,4,1
};
这里的数字,是第一个array的index。
下面你要建立两个Buffer它们是用来存放这两个array的。
ByteBuffer bb = ByteBuffer.allocateDirect(vertex.length*4);
bb.order(ByteOrder.nativeOrder());
fbv=bb.asFloatBuffer();
fbv.put(vertex);
fbv.position(0);
ffe=ByteBuffer.allocateDirect(edge.length);
ffe.put(edge);
ffe.position(0);
这样一个三维的菱形就画好了。
下面你要写一个方法能让它自己把自己画出来!
public void draw(GL10 gl)
{
gl.glFrontFace(GL10.GL_CW);
gl.glVertexPointer(3, GL10.GL_FLOAT, 0, fbv);
gl.glDrawElements(GL10.GL_TRIANGLES, 24, GL10.GL_UNSIGNED_BYTE, ffe);
}
这几句话费了我好大力气去理解。