Android使用OpenGL基本步骤

使用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);

你可能感兴趣的:(OpenGL,ES)