Android 3D 游戏学习笔记(1)-openGL基础

小满(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采用三维笛卡尔坐标系,场景内构建的所用或部分物体的顶点的XYZ坐标值以及顶点数组给出

3.绘制三角形

  整个的框架首先是通过入口类Activity启动,然后通过Activity启动一个GLSurfaceView,然后在GLSurfaceView中启动一个渲染器,具体方法如下

myRenderer=new SceneRenderer();//创建场景渲染器

this.setRenderer(myRenderer);//设置渲染器

this.setRenderMode(GLSurfaceView.RENDERMODE_CONTINUOUSLY);//设置渲染模式为主动渲染

这个渲染器的类是我们自己实现的,继承于GLSurfaceViewRenderer我们在重写的onDrawFrame方法中调用我们自己的画法就可以了

在画法的参数中需要数据缓存类参数,这种参数的构建方法如下

首先分配内存

ByteBuffer vbb=ByteBuffer.allocateDirect(vertices.length*4);

由于顶点的参数是整型,所以相对于Bytevertices数组的长度要乘以4vertices是顶点整型顶点数组)

然后设置这个字节缓冲的字节顺序为本地平台的字节顺序

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的参数同glVertexPointerglDrawElements的第一个参数是填充类型,这里是三角形填充,第二个参数是顶点数量,第三个参数是数据缓存类的类型,这里是字节型,最后一个参数是数据缓存类参数。

好了,到这里,我们基本上可以构建一个openGL ES的应用了

参考自Android 3d 游戏开发技术详解与典型案例,如有错误之处,希望大家多多指正

下一篇写一下绘制方式

posted @ 2012-02-11 21:37  满硕泉  阅读(165)  评论(0编辑  收藏  举报