1.OpenGLを紹介する。
www.baidu.com
2.androidのSDKにはOpenGL関するクラス。
   android.opengl
   javax.microedition.khronos.egl
   javax.microedition.khronos.opengles
3.androidにはOpenGLの勉強要点。
  ① OpenGL有自己的Surface --> GLSurfaceView
  ② GLSurfaceView需要你注册一个Renderder,它是GLSurfaceView.Renderer接口,一般来说多是自己实现的,例如里中的SimpleRenderer。

***附件中的 AndroidGL.rar 大家可以下载下来学习一下。

OPENGL ES中几个重要函数详细说明:
一下是我的总结,大家也可以参照这哥们的:
http://student.csdn.net/space.php?uid=46868&do=blog&view=me&page=15
http://student.csdn.net/space.php?uid=46868&do=blog&id=18197
和http://www.cocoachina.com/gamedev/openal/2010/0430/1286_2.html
gl.glMatrixMode(GL10.GL_PROJECTION);
void glMatrixMode(GLenum mode)
  参数
  mode 指定哪一个矩阵堆栈是下一个矩阵操作的目标,可选值: GL_MODELVIEW、  GL_PROJECTION、GL_TEXTURE.
  说明
  glMatrixMode设置当前矩阵模式:
  GL_MODELVIEW,对模型视景矩阵堆栈应用随后的矩阵操作.
  GL_PROJECTION,对投影矩阵应用随后的矩阵操作.
  GL_TEXTURE,对纹理矩阵堆栈应用随后的矩阵操作.
  与glLoadIdentity()一同使用
  glLoadIdentity():该函数的功能是重置当前指定的矩阵为单位矩阵。
  在glLoadIdentity()之后我们为场景设置了透视图。 glMatrixMode(GL_MODELVIEW)设置当前矩阵为模型视图矩阵,模弄视图矩阵储存了有关物体的信。

② GLU.gluOrtho2D(gl, 0.0f,1.3f,0.0f,1.0f);
  gluOrtho2D(GL10 gl, float left, float right, float bottom, float top)
  名称
  gluOrtho2D定义了一个二维图像投影矩阵
  说明
  参数 left,right指明平面的左边和右边的垂直坐标
     bottom,top 指明平面底部和顶部的水平坐标。
  描述:建立了一个可视的二位平面区域。这个和用glOrtho函数效果是一样的当 glOrtho的near=0,far=1时

③ gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
  glClear(int mask)
  glClear()语句的作用是用当前缓冲区清除值,也就是glClearColor或者glClearDepth等函数所指定的值来清除指定的缓冲区。比如:
  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)表示要清除颜色缓冲以及深度缓冲
  GL_COLOR_BUFFER_BIT The buffers currently enabled for color writing. 当前可写的颜色缓冲
  GL_DEPTH_BUFFER_BIT The depth buffer. 深度缓冲
  GL_ACCUM_BUFFER_BIT The accumulation buffer. 累积缓冲
  GL_STENCIL_BUFFER_BIT The stencil buffer. 模板缓冲

  glClearColor(0.0,0.0,0.0,0.0);
  glClear(GL_COLOR_BUFFER_BIT);
  第一条语句表示清除颜色设为黑色,第二条语句表示把整个窗口清除为当前的清除颜色,glClear()的唯一参数表示需要被清除的缓冲区。

④ gl.glShadeModel(GL10.GL_SMOOTH);
  void glShadeModel ( GLenum mode);
  设置着色模式。参数mode可以是GL_SMOOTH(默认值)或GL_FLAT。采用恒定着色时(即 GL_FLAT),使用图元中某个顶点的颜色来渲染整个图元。
  在使用光滑着色时(即GL_SMOOTH),独立的处理图元中各个顶点的颜色。对于线段图元,线段上各点的颜色将根据两个顶点的颜色通过插值得到。对于多边形图元,多边形内部区域的颜色将根据所有顶点的颜色插值得到。

⑤ glTranslatef(float x, float y, float z)
glTranslatef是改变你要画的东西的位置。
如glTranslatef(1,2,3)是接下来的东西在(1,2,3)的地方开始画,它一般和 glScalf,glRotatef一起来控制图元的几何特性,用glPushMariex()/glPushMariex()一起控制 图元对象层次。glVertex(x,y,z)如果在后面的话那里面的坐标就是相对 glTranslatef(1,2,3)的了。
例:
int n=45;//定义旋转45度
for(double x=-2;x <=2;x+=0.5)
{
glPushMatrix();//压栈
glTranslatef(x,0.0f,0.0f);//下面物体将在(x,0.0f,0.0f)的位置绘制
glRotatef(n,0.0,1.0,0.0);//沿x,0.0f,0.0f的y轴旋转45度
glPushMatrix();//压栈
glBegin(GL_QUADS);//画正方形
glVertex3f(0,-1.0f,-1.0f);//以下坐标都是相对(x,0.0f,0.0f)的
glVertex3f(0,-1.0f,1.0f);
glVertex3f(0,1.0f,1.0f);
glVertex3f(0,1.0f,-1.0f);
glEnd();
glPopMatrix();//出栈
glPopMatrix();//出栈
}

⑥ gl.glVertexPointer(3, GL10.GL_FLOAT, 0, triangleBuff);
  void glVertexPointer(GLint size, GLenum type, GLsizei stride,
       const GLvoid *pointer);
  指定了需要访问的空间坐标数据。
  pointer是数组包含的第一个顶点的第一个坐标的内存地址。
  type指定了数组中每个坐标的数据类型(GL_SHORT、GL_INT、GL_FLOAT或GL_DOUBLE)。   
  size是每个顶点的坐标数量,它必须是2、3或4。
  stride是连续顶点之间的字节偏移量。如果stride是0,数组中的顶点便是紧密相邻的。
要访问其他几个数组,可以使用一下的函数:
  void glColorPointer(GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);
void glSecondaryColorPointer(GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);
void glIndexPointer(GLenum type, GLsizei stride, const GLvoid *pointer);
void glNormalPointer(GLenum type, GLsizei stride,const GLvoid *pointer);
void glFogCoordPointer(GLenum type, GLsizei stride,const GLvoid *pointer);
void glTexCoordPointer(GLint size, GLenum type, GLsizei stride,const GLvoid *pointer);
void glEdgeFlagPointer(GLsizei stride, const GLvoid *pointer);

 gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
  gl.glEnableClientState(GL10.GL_COLOR_ARRAY);
......

void glEnableClientState(GLenum array)
指定了需要启用的数组。array 参数可以使用下面这些符号常量:
GL_VERTEX_ARRAY、GL_COLOR_ARRAY、GL_SECONDARY_
COLOR_ARRAY、 GL_INDEX_ARRAY、GL_NORMAL_ARRAY、
GL_FOG_COORDINATE_ARRAY、 GL_TEXTURE_COORD_ ARRAY和GL_EDGE_FLAG_ARRAY
[url] http://www.huachu.com.cn/read/readbookinfo.asp?sectionid=1000003293[/url] 
启用定点数组。
从理论上说,最多可能调用这个函数8次,激活8个可用的数组。但是在实践中,
可以激活的数组最多只有6个, 这是因为有些数组不能同时激活。
例如,不可能同时激活GL_COLOR_ARRAY和GL_INDEX_ARRAY。
应用程序的显示模式可以支持 RGBA模式,也可以支持颜色索引模式,但是不
能同时支持这两种模式。

⑧ gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, 3);
从数组提供原始数据
  void glDrawArrays(GLenum mode, GLint first, GLsizei count);
   创建一个几何图元序列,使用每个被启用的数组中从first开始,
   到first + count-1结束的数组元素。mode指定了创建的图元类型,它的值和    glBegin()函数所接受的参数值相同。例如:GL_POLYGON、GL_LINE_LOOP、GL_LINES和GL_POINTS等。

⑨ ByteBuffer.allocateDirect(arr.length*4);
  ByteBuffer allocateDirect(int capacity)
 分配新的直接字节缓冲区。 新缓冲区的位置将为零,其界限将为其容量,
 其标记是不确定的。无论它是否具有底层实现数组,其标记都是不确定的。
 参数:
 capacity - 新缓冲区的容量,以字节为单位
 返回:
 新的字节缓冲区
 抛出:
 IllegalArgumentException - 如果 capacity 为负整数

更多相关文章

  1. Android(安卓)string-array简单使用
  2. Android中使用httpclient访问服务器,需要session功能
  3. android Region碰撞
  4. Android(安卓)中Touch 事件的分发和消费机制
  5. Android中解析JSON形式的数据
  6. Android(安卓)ListView的OnItemClickListener()参数详解
  7. 转载:Android(安卓)常用代码集合
  8. android状态栏右上角增加图标的方法
  9. android java json与实体互相转换工具

随机推荐

  1. 介绍Android(安卓)Touch事件的传递机制
  2. 常用的20种Android(安卓)Studio插件
  3. Android(安卓)SDK install —— a folder
  4. Android(安卓)9.0 http请求问题
  5. Ubuntu中手动安装配置JDK, Android(安卓)
  6. 如何让 android 完全退出
  7. Android数据库开源框架GreenDao分析
  8. Android(安卓)默认AP名字,以及AP名字存储
  9. android 监听手机电量变化
  10. android 3D-纹理------球的纹理