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中坐标系统及其转换。

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

来源:CSDN,作者:会说话的小鱼
原文:https://blog.csdn.net/china0851/article/details/85156180
版权声明:本文为博主原创文章,转载请附上博文链接!

最新文章