opengl流水线

其实每个片元都对应于帧缓冲中的一个像素,之所以不直接称之为像素是因为
3D空间中的物体是可以相互遮挡的。而一个3D场景最终显示到屏幕上虽然是一个
整体,但每个3D物体的每个图元是独立处理的。这就可能出现这样的情况,系统
先处理的是位于离观察点较远的图元,其光栅化成为了一组片元,暂时送入帧缓冲
的对应位置。
   但后面继续处理离观察点较近的图元时也光栅化出了一组片元,两组片元中有对应到帧缓冲
中同一个位置的,这时距离近的片元将覆盖距离远的片元(如何覆盖的检测是在深度检测阶段
完成)。因此某片元就不一定能成为最终屏幕上的像素,称之为像素就不准确了,可以将其理解为候选
像素。每个片元包含其对应的顶点坐标、顶点颜色、顶点文理坐标以及顶点的深度等信息,
这些信息是系统根据投影前此片元对应的3D空间中的位置及此片元相关的图元的各顶点信息进行插值
计算而生产的。
6 纹理环境和颜色求和
   该阶段主要有两个任务,具体如下所列。
   一个是纹理采样任务,其主要是根据当前需处理片元的纹理坐标及采用的纹理id对相应的
纹理图进行纹理采样,获取采样值。所谓纹理采样值就是从纹理图中某个纹理坐标位置获取的一个颜色值。
另外一个就是颜色求和,主要是执行颜色的变化,其根据纹理采样及光照计算等的结果综合生成
需处理片元的颜色。
7、雾
该阶段主要是根据程序中设置的雾的相关参数,如:颜色、浓度、范围等,以及某种雾的数学
模型来计算当前处理的片元受雾影响后的颜色。
8、Alpha测试
如果程序中启用了Alpha测试,OpenGL ES会检查每个片元的Alpha值,只有Alpha值符合测试条件的片元
才会送入下一阶段,不满足条件的片元则被丢弃。
9、裁剪测试
如果程序中启用了裁剪测试,OpenGL ES会检查每个片元在帧缓冲中对应的位置,若对应位置在裁剪窗口中则将
此片元送入下一阶段,否则丢弃此片元。
10.深度测试和模板测试
深度测试是指将输入片元的深度值与帧缓冲区中存储的对应位置片元的深度值进行比较,若输入片元的深度值
小则将输入片元送入下一阶段准备覆盖帧缓冲中的原片元或与帧缓冲中的原片元混合,否则丢弃输入片元。
模板测试的主要功能为将绘制区域限定在一定的范围内,一般用在湖面倒影、镜像等场合。
11.颜色缓冲混合
若程序中开启了Alpha混合,则根据混合因子将上一阶段送来的片元与缓冲中对应位置的片元进行Alpha混合;
否则送入的片元将覆盖帧缓冲中对应位置的片元。
12、抖动
抖动是一种简单的操作,其允许只使用少量的颜色模拟出更宽的颜色显示范围,从而使颜色视觉效果更加地丰富。
例如,可以使用白色以及黑色模拟出一种过渡的灰色。但使用抖动也是有其固有缺点的,那就是会损失一部分分辨率,
因此对于现在主流的原生颜色就很丰富的显示设备一般是不需要启用抖动的。当下的一些系统中虽然在API方面支持开启抖动,但这
仅仅是为了API的兼容,其可能根本不会去进行事实上的抖动操作。
13、帧缓冲
OpenGL ES中的物体绘制并不是直接在屏幕上进行的,而是预先在帧缓冲区中进行绘制,每绘制完一帧再将绘制的结果
交换到屏幕上。因此,在每次绘制新的一帧时都需要清除缓冲区中的相关数据,否则有可能产生不正确的绘制效果。
同时需要了解的是为了应对不同方面的需要,帧缓冲是由一套组建组成的,主要包括颜色缓冲、深度缓冲以及模板缓冲,各
组件的具体用途如下所列。颜色缓冲用于存储每个片元的颜色值,每个颜色值包括RGBA4个色彩通道,应用程序运行时
在屏幕上看到的就是颜色缓冲中的内容。深度缓冲用于存储每个片元的深度值,所谓深度值是指以特定的内容格式表示的
从片元处到观察点(摄像机)的距离。在启用深度测试的情况下,新片元想进入帧缓冲时需要将自己的
深度值与帧缓冲中对应位置片元的深度值进行比较,若结果为小于才有可能进行缓冲,否则被丢弃。模板缓冲用于存储每个片元
的模板值,供模板测试使用。模板测试是几种测试中最为灵活和复杂的一种。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值