小满(bill man)个人原创,欢迎转载,转载请注明地址,小满(bill man)的专栏地址http://blog.csdn.net/bill_man
1.openGL ES
openGL ES(OpenGL for Embedded System)是专为嵌入式设备设计的OpenGL的一个子集,也加入了一些扩展功能,可以达到移动设备降低功耗的目的。
2.多边形和三角形
3d模型中的基本单位就是顶点,点构成多边型,多边形构成3d世界,在OpenGL ES中基于性能的考虑只支持通过三角形来构成多边形。比如一个正方体有六个面,每个面可以拆成两个三角形 ,一共就是12个三角形。
OpenGL ES采用三维笛卡尔坐标系,场景内构建的所用或部分物体的顶点的X,Y,Z坐标值以及顶点数组给出
3.绘制三角形
整个的框架首先是通过入口类Activity启动,然后通过Activity启动一个GLSurfaceView,然后在GLSurfaceView中启动一个渲染器,具体方法如下
myRenderer=new SceneRenderer();//创建场景渲染器
this.setRenderer(myRenderer);//设置渲染器
this.setRenderMode(GLSurfaceView.RENDERMODE_CONTINUOUSLY);//设置渲染模式为主动渲染
这个渲染器的类是我们自己实现的,继承于GLSurfaceView和Renderer我们在重写的onDrawFrame方法中调用我们自己的画法就可以了
在画法的参数中需要数据缓存类参数,这种参数的构建方法如下
首先分配内存
ByteBuffer vbb=ByteBuffer.allocateDirect(vertices.length*4);
由于顶点的参数是整型,所以相对于Byte,vertices数组的长度要乘以4(vertices是顶点整型顶点数组)
然后设置这个字节缓冲的字节顺序为本地平台的字节顺序
vbb.order(ByteOrder.nativeOrder());
然后就可以转换为int型缓冲,放入坐标数据,设置初始位置等
myVertexBuffer=vbb.asIntBuffer();
myVertexBuffer.put(vertices);
myVertexBuffer.position(0);
接下来回到绘制三角形这个话题,四个步骤就可以
首先是一些初始化内容启用顶点数组,启用颜色数组
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);//启用顶点坐标数组
gl.glEnableClientState(GL10.GL_COLOR_ARRAY);//启用顶点颜色数组
然后为画笔指定顶点坐标数据
gl.glVertexPointer(3,GL10.GL_FIXED,0,myVertexBuffer);
第一个参数是顶点坐标数量,第二个参数设置坐标为整形,第三个为顶点坐标之间间隔,最后一个为我们最早定义的数据缓存类参数
然后就分别是为画笔指定颜色和索引数据
gl.glColorPointer(4,GL10.GL_FIXED,0,myColorBuffer);
gl.glDrawElements(GL10.GL_TRIANGLES,iCount,GL10.GL_UNSIGNED_BYTE,myIndexBuffer);
gl.glColorPointer的参数同glVertexPointer,glDrawElements的第一个参数是填充类型,这里是三角形填充,第二个参数是顶点数量,第三个参数是数据缓存类的类型,这里是字节型,最后一个参数是数据缓存类参数。
好了,到这里,我们基本上可以构建一个openGL ES的应用了
参考自Android 3d 游戏开发技术详解与典型案例,如有错误之处,希望大家多多指正
下一篇写一下绘制方式