学习资料: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实现了具备可编程着色功能的图形管线,图形管线以下所示:学习
上面的图片展现了图形管线的各个阶段,能够看到上面由顶点着色器,片断着色器,图元装配等等一系列的阶段,下面就对各个阶段作个介绍。测试
顶点着色器输入包括:.net
顶点着色器的输出在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轴。
举个例子:不考虑Z轴,若是点为(-2,-2)则在图元装配期间则被抛弃。
此阶段绘制对应的图元(点,线,三角形)。光栅化是将图元转换为一组二维片断的过程。而后这些片断交由片断着色器处理,这些二维片断表明在屏幕上绘制的像素。
片断着色器对光栅化阶段生成的每一个片断进行着色处理,采用以下输入:
示例:
precision mediump float;//精度类型 in vec4 v_color;//接收顶点着色器传递的v_color;输入 out vec4 fragColor;//输出变量 void main(){ fragColor=v_color; }
图示以下: