opengl es3.0学习启动篇一:opengl es简介

学习资料:c++

OpenGL ES 3.0编程指南编程

https://blog.csdn.net/yellowcath/article/details/46534559api

简介

opengl es是Khronos组织创立的API套装之一,咱们只要调用对应的api就能够写出各类炫丽的图形效果。本系列博客基于opengl es3.0进行代码编写,主要运行于Android系统上。数组

opengl es3.0实现了具备可编程着色功能的图形管线,图形管线以下所示:学习

api

上面的图片展现了图形管线的各个阶段,能够看到上面由顶点着色器,片断着色器,图元装配等等一系列的阶段,下面就对各个阶段作个介绍。测试

顶点着色器

顶点着色器输入包括:.net

  • 着色器程序:描述顶点上执行操做的顶点着色器程序源代码或者可执行文件
  • 顶点着色器输入:用顶点数组提供的每一个顶点的数据
  • 统一变量(uniform):顶点着色器使用的不变的数据
  • 采样器:表明顶点着色器使用纹理的特殊统一变量类型

顶点着色器的输出在opengl es2.0版本使用的是varying变量,3.0中更名为顶点着色器输出变量。在图元光栅阶段,为每一个生成的片断计算顶点着色器输出值,而且做为输入值传递给片断着色器。code

示例:orm

uniform mat4 u_mvpMatrix;
in vec4 a_position;//输入,来自外部程序
in vec4 a_color;//输入,来自外部程序
out vec4 c_color;//输出,片断着色器接收
void main(){
    v_color=a_color;
    gl_Position=u_mvpMatrix*a_position;
}

图元装配

图元是三角形,点,线等几何对象,在opengl es中全部的图形用这三种基本元素来组成,如正方形用两个三角形就能够表示。顶点着色器的点在此期间会进行组成成图元。对象

对于每一个图元,须要肯定的是是否在视椎体(屏幕可见的3D空间区域)内,若是没有彻底在区域内,则须要被裁减,区域外则被抛弃,计算后将顶点转换成屏幕坐标。

在opengl以世界坐标系为基础,即以屏幕中心为(0,0),向右延伸X轴,向上延伸Y轴,这跟Android中的坐标系不一样,Android以左上角为(0,0),向右延伸X轴,向下延伸Y轴。

coordinate

举个例子:不考虑Z轴,若是点为(-2,-2)则在图元装配期间则被抛弃。

光栅化

此阶段绘制对应的图元(点,线,三角形)。光栅化是将图元转换为一组二维片断的过程。而后这些片断交由片断着色器处理,这些二维片断表明在屏幕上绘制的像素。 图元

片断着色器

片断着色器对光栅化阶段生成的每一个片断进行着色处理,采用以下输入:

  • 着色器程序:描述片断所执行操做的片断着色器程序源代码或者可执行文件
  • 输入变量:光栅化单元用插值为每一个片断生成的顶点着色器输出
  • 统一变量:片断(或顶点)着色器使用的不变的数据
  • 采样器:表明片断着色器所用纹理的特殊统一变量类型

示例:

precision mediump float;//精度类型
in vec4 v_color;//接收顶点着色器传递的v_color;输入
out vec4 fragColor;//输出变量
void main(){
    fragColor=v_color;
}

逐片断操做

图示以下: 逐片断

  • 像素归属测试:肯定帧缓冲区中位置的像素是否归当前的上下文全部,如一个显示opengl es帧缓冲区窗口的窗口受被另外一个窗口遮盖,若是被遮盖了,则不显示当前像素。该项功能有opengl es内部控制
  • 裁剪测试:是否位于做opengl es的一部分裁剪矩形内,不属于则抛弃
  • 模板和深度测试:在输入片断的模板和深度值上测试,已肯定片断是否该拒绝
  • 混合:将新生成的片断颜色值与保存在帧缓冲区位置的颜色值组合起来。
  • 抖动:抖动可用于最小化由于使用有限精度在帧缓冲区保存颜色值而产生伪值。
相关文章
相关标签/搜索