简述

  • OpenGL(全写Open Graphics Library)是指定义了一个跨编程语言、跨平台的编程接口规格的专业的图形程序接口。它用于三维图像(二维的亦可),是一个功能强大,调用方便的底层图形库。
  • OpenGL ES (OpenGL for Embedded Systems) 是 OpenGL 三维图形 API 的子集,所以更加轻便,在OpenGL ES的世界里,没有四边形、多边形,无论多复杂的图形都是由点、线和三角形组成的。


    简述_第1张图片
OpenGL ES 2.0中基本概念
  • 着色器(Shader):是在GPU上运行的小程序,使用OpenGL ES SL语言来编写,它是一个描述顶点或像素特性的简单程序。
  • 顶点着色器:对于发送给GPU的每一个顶点,都要执行一次顶点着色器。其功能是把每个顶点在虚拟空间中的三维坐标变换为可以在屏幕上显示的二维坐标,并带有用于z-buffer的深度信息。顶点着色器可以操作的属性有:位置、颜色、纹理坐标,但是不能创建新的顶点。
  • 片元着色器:为组成点线三角形的每个片段生成最终的颜色,针对每个片段,它都会执行一次;一个片段是一个小的,单一颜色的长方形区域,类似于屏幕像素

OpenGL ES中有两种投影方式:正交投影和透视投影。正交投影,物体不会随距离观测点的位置而大小发生变化。而透视投影,距离观测点越远,物体越小,距离观测点越近,物体越大。

OpenGL ES 2.0过程及理解
读取顶点数据——执行顶点着色器——组装图元——光栅化图元——执行片元着色器——写入帧缓冲区——显示到屏幕上

  • OpenGL作为本地库直接运行在硬件上,没有虚拟机,也没有垃圾回收或者内存压缩。在Java层定义图像的数据需要能被OpenGL存取,因此,需要把内存从Java堆复制到本地堆。
  • 顶点着色器是针对每个顶点都会执行的程序,是确定每个顶点的位置。同理,片元着色器是针对每个片元都会执行的程序,确定每个片元的颜色。
  • 着色器需要进行编译,然后链接到OpenGL程序中。一个OpenGL的程序就是把一个顶点着色器和一个片段着色器链接在一起变成单个对象。
使用步骤概括
  1. 在AndroidManifest.xml文件中设置使用的OpenGL ES的版本:
   
  
  
      // 动态代码
      ActivityManager activityManager = (ActivityManager) 
      getSystemService(ACTIVITY_SERVICE);
      ConfigurationInfo configurationInfo = activityManager.getDeviceConfigurationInfo();
      if (configurationInfo.reqGlEsVersion >= 0x2000) {
           glSurfaceView.setEGLContextClientVersion(2);
      }
  1. 用GLSurfaceView作为显示三角形的View,图形的具体渲染工作都是在Render
    中完成的。
  2. 实现GLSurfaceView的Render,在Render中完成三角形的绘制,具体行为有
  • 加载顶点和片元着色器
  • 确定需要绘制图形的坐标和颜色数据
  • 创建program对象,连接顶点和片元着色器,链接program对象。
  • 设置视图窗口(viewport)。
  • 将坐标数据颜色数据传入OpenGL ES程序中
  • 使颜色缓冲区的内容显示到屏幕上。
一般绘制图形流程
1. 创建顶点着色器和片元着色器
2. 创建程序
3. 添加顶点着色器和片元着色器到程序
4. 连接程序
5. 使用程序
6. 获取顶点着色器句柄
7. 启用句柄 
8. 设置顶点着色器句柄数据
9. 获取片元着色器句柄
10. 设置片元着色器句柄数据
11. 绘制
12. 禁用顶点着色器句柄

你可能感兴趣的:(简述)