使用openGL步骤:
实例见(http://blog.csdn.net/gigi_/article/details/53558906)
- 1.创建GLSurfaceView对象
- 2.创建GLSurfaceView.renderer实现类.
- 3.设置activity的contentView,以及设置view的render对象.
4.实现render类的过程.
a.onSurfaceCreate()方法
- 1.设置清屏的颜色和启用顶点缓冲区
//设置清屏色 gl.glClearColor(0, 0, 0, 1); //启用顶点缓冲区. gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
b.onSurfaceChanged()方法
- 1.设置viewport(视口)
gl.glViewport(0, 0, width, height);
- 2.操纵投影矩阵,设置平截头体(比例通常和视口比例相同,否则输出画面会走样)
//矩阵模式,投影矩阵,openGL基于状态机 gl.glMatrixMode(GL10.GL_PROJECTION); //加载单位矩阵 gl.glLoadIdentity(); //平截头体 gl.glFrustumf(-1f, 1f, -ratio, ratio, 3, 7);
c.onDrawFrame()方法
- 1.清除颜色缓冲区
gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
2.操纵模型视图矩阵,设置眼球的参数
gl.glMatrixMode(GL10.GL_MODELVIEW); gl.glLoadIdentity();//加载单位矩阵 GLU.gluLookAt(gl, 0, 0, 5, 0, 0, 0, 0, 1, 0);
3.定义图形顶点坐标值数组
//一般用浮点数 float[] coords = { 0f,0.5f,0f, -0.5f,-0.5f,0f, 0.5f,-0.5f,0f };
4.将顶点坐标转换成缓冲区数据
//分配字节缓存区空间,存放顶点坐标数据 ByteBuffer ibb = ByteBuffer.allocateDirect(coords.length * 4); //设置的顺序(本地顺序) ibb.order(ByteOrder.nativeOrder()); //放置顶点坐标数组 FloatBuffer fbb = ibb.asFloatBuffer(); fbb.put(coords); //定位指针的位置,从该位置开始读取顶点数据 ibb.position(0);
5.设置绘图颜色
//RGBA gl.glColor4f(1f, 0f, 0f, 1f);
6.指定顶点缓冲区指针
//3:3维点,使用三个坐标值表示一个点 //type:每个点的数据类型 //stride:0,跨度.点是连续绘制的还是中间有跨度 //ibb:指定顶点缓冲区 gl.glVertexPointer(3, GL10.GL_FLOAT, 0, ibb);
7.绘图
//0:起始点: //3:绘制点的数量 //第一个参数模式,opengl里只有三种,画点,画线画三角形,面是三角形,不管是曲面球面都是三角形画出来的,如球是无数个三角形画出来的 gl.glDrawArrays(GL10.GL_TRIANGLES, 0, 3);