opengles2——1.opengles介绍

【渲染管线】


【顶点着色器】


属性Attribute:顶点矩阵支持的Per_vertex数据

uniforms:顶点着色器使用的常量数据

samplers:被uniforms使用的特殊类型,在顶点着色器的贴图中使用,是可选的

  顶点着色器的输出叫做varying变量,在最初的光栅化阶段,这些变量被计算,作为片段着色器的输入,从顶点着色器的矩阵使用插补的方法产生片段着色器的变量,输入和输出在上图描述。

  顶点着色器被使用在传统的基于顶点的操作,如位移矩阵、计算光照方程、产生贴图坐标。下面的例子中,顶点着色器需要一个位置和颜色数据作为输入属性,输入位置数据是vec4向量,输出是变换后的位置和颜色:

// UNIFORMS
uniform mat4	u_mvpMatrix;	// 用来将P从模型空间model space转到标准化的设备空间normalized device space

// ATTRIBUTES
attribute vec4	a_position;		// 位置值
attribute vec4	a_color;		// 输入顶点颜色

// VARYINGS 输出到fragment shade片段着色器
varying vec4 	v_color;		// 输出顶点颜色

void main()
{
	v_color = a_color;
	gl_Position = u_mvpMatrix * a_position;
}
u_mvpMatrix应用存储模型的关联视图和投射矩阵。

【图元装配】

  图元是能被opengles绘制的几何物体,描述了一个顶点属性和图元几何体以及图元类型的集合。

  顶点属性包括计算位置、颜色和贴图坐标的信息,他们将被输入到片段着色器中。

  顶点着色器能绘制的图元包括三角形、直线、点,对每个图元必须判断是否在视锥体内,在外可能被丢弃。

  然后顶点位置被转换为屏幕坐标,剔除操作也能舍弃一些图元,根据图元位于正面还是背面。剪切和剔除后图元进入光栅化阶段。

【光栅化】  

  光栅化 是转换图元为二维片段的过程,被片段着色器执行,二维的片段像素能被绘制在屏幕上。


【片段着色器】

 

  片段着色器使用下面的输入,执行光栅化后形成片段:

varying变量:光栅化阶段使用插补技术为片段着色器产生,顶点着色器的输入

uniforms:常量数据

samplers:特殊类型,在贴图中使用

  片段着色器也能丢弃片段或产生一些颜色值像gl_FragColor,光栅化阶段产生的颜色、深度、模板、屏幕坐标(Xw, Yw)变成opengl es2.0管线输入,

下面显示片段着色器绘制一个gouraud三角形:

precision mediump float;

varying vec4	v_color;		// 从顶点着色器 输入的顶点颜色

void main()
{
	gl_FragColor = v_color;
}
  第一行显示质量,片段着色器不需要定义输出,因为片段着色器仅仅输出的是gl_FragColor。

  下一个操作是per-fragment操:


像素所有权测试:决定缓冲器某点的像素当前是否被opengles所有,例如窗口检测到缓冲区被另一个窗口遮挡,视图系统可决定遮挡部分不显示

剪切测试:测试某点是否在剪切矩形内,若在外片段被丢弃

模板深度测试:决定输入的片段是否该被拒绝

抖动:被使用在用几种颜色的组合模拟出大范围内的多种色彩模式

  per-fragment阶段最后,片段颜色、深度值、模板值是否被写入缓冲区还要看各自的掩码位是否被使能。

  opengles2也支持缓冲器数据读回功能,但仅颜色缓冲区像素能读回。且alpha测试盒logicop测试不再是per-fragment测试的部分。

  因为片段着色器能丢弃片段,alpha测试能在片段着色器阶段执行。

【EGL】

  opengles要求一个渲染上下文环境和绘图窗口,渲染上下文存储着opengl es状态的属性,绘图窗口决定那个窗口被绘制、

指出将要绘制的图形对颜色缓冲区、深度缓冲区、模板缓冲区的要求,还有每个缓冲区位数。

  任何opengles在使用egl渲染前需要做下面的事情:

·查询设备上可用的显示器初始化它,例如一个翻盖手机又两个LCD屏幕,可渲染其中的一个或两个。

·创造一个渲染屏幕,EGL能创造隐藏平面或显示屏平面,显示屏平面联系着操作系统,隐藏平面联系着像素缓冲区。

·创造渲染上下文,EGL需要创造渲染上下文,它在实际使用前需要联系上合适的平面

【库和包含文件】  

  需要链接:libGLESv2.lib和ELG库libEGL.lib

  需要包含的头文件:

#include <EGL/egl.h>

#include <GLES2/gl2.h>

#include <GLES2/gl2ext.h>

  egl.h是egl头文件,gl2.h是opengles2.0头文件,gl2ext.h是opengles批准的扩展。

  所有的EGL函数以egl前缀开始(如eglCreateWindowSurface),EGL数据类型开始,如EGLint和EGLenum。

  所有的opengl函数以gl开始,组成函数的每个单词的首个字母大写(如glBlendEquation),同样数据类型以GL开始。

  命令后缀和输入参数类型的描述:


  opengles命令出错会产生一个错误码,能用glGetError查询。一旦错误码被查询,当前错误码将变成GL_NO_ERROR。

  除了GL_OUT_OF_MEMORY错误码意外其他的错误码将被忽略,不影响程序运行状态。

【基本状态管理】

  图1-1显示opengles2.0各种管线状态,每种状态能被使能或关闭,状态值被各自的线程维护,例如抖动、剔除、混合等。

  当上下文被初始化时,这些状态被初始化。状态使能可用glEnable和glDisable命令设置。

  初始化时除了GL_DITHER功能设置为GL_TRUE外,其他的功能都为GL_FALSE,若输入非法参数产生GL_INVALID_ENUM错误码。

  可使用glIsEnabled函数查询某状态是否使能。特殊的状态值像混合因子,深度测试值等也使用glGet***函数查询。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值