(6)Opengl ES基础总结

       Opengl ES基础系列文章是音视频学习的图形图像部分,旨在通过这部分学习,能够把Opengl ES和视频结合在一起,最终形成一个完整的知识体系。   

       经过前面章节学习,我们对Opengl ES在android中开发有了基本的整体认识,知道顶点着色器和片段着色器,以及它们的写法,可以绘制图形(三角形)和图像(纹理操作),下面我们对前面章节的学习做个总结:

   
       1)EGL环境的搭建


       .获取默认显示设备
       .初始化设备
       .配置显示设备
       .创建EGLContext
       .创建EGLSurface
       .EGLContext关联到当前线程


       2)attribute、uniform、varying修饰符


       .attribute 只在顶点着色器中使用,用来保存顶点、纹理等坐标数据
       .uniform 修饰的变量有全局唯一性,可在顶点和片元着色器使用,不改变其值
       .varying 其修饰的变量主要用来在顶点、片元着色器以及光栅阶段透传数据,可在顶点和片元着色器中使用


       3)顶点和片元着色器


       .Opengl ES着色语言,类似C语言写法
       .有变量定义
       .有函数定义
       .Opengl ES执行自动调用main方法

       .用法
        int iShader = GLES20.glCreateShader();
        GLES20.glShaderSource(iShader, source);
        GLES20.glCompileShader(iShader);
        上面就是生成一个着色器的标准步骤。


       4)program


       .program就是把顶点和片元着色器链接成Opengl ES能够识别的代码
       .用法
        int iProgram = GLES20.glCreateProgram();
        GLES20.glAttachShader(iProgram, iShader);
        GLES20.glLinkProgram(iProgram);


       5)attribute变量存取


       .先在program中找到对应的索引
       .然后把数据赋值给对应的索引
       .激活属性是其对Opengl ES可见
       .用法
        int location = GLES20.glGetVertexAttribLocation(iProgram, "vVertexCoor");
        GLES20.glVertexAttribPointer();
        GLES20.glEnableVertexAttrib(location);


       6)uniform变量存取


       .在着色器中只不可改变
       .通过GLES20.glGetUniformLoaction查询其在program中的索引
       .通过GLES20.glUniformxxx函数为其赋值


       7)varying


       .一般在顶点着色器中赋值
       .然后在后面的管线中使用,比如片元着色器和光栅化


       8)绘制三角形


       .编写顶点着色器
       .编写片元着色器
       .顶点数据赋值给顶点着色器变量
       .颜色值赋值给片元着色器变量
       .调用GLES20.glDrawArrays绘制
       .调用GLES20.glSwapBuffers()渲染到屏幕(准确说是到帧缓冲区)


       9)绘制图像


       .生成纹理对象
       .绑定纹理对象
       .把图像数据赋值给纹理对象
       .把此纹理对象赋值给片元着色器的sampler2D变量
       .调用GLES20.glDrawArrays绘制
       .调用GLES20.glSwapBuffers()渲染到屏幕(准确说是到帧缓冲区)


       上面总结了Opengl ES基础的东西,后面会学习一些稍微高级的知识,比如VBO、FBO、纹理共享、摄像头渲染到多个Surface表面、投影以及Opengl ES中坐标系统及其转换。

       本系列文章均为原创,主要总结作者多年在软件行业的一些经验,和大家共同学习、进步,转载请注明出处,谢谢!

猜你喜欢

转载自blog.csdn.net/china0851/article/details/85156180