OpenGL学习笔记(四)颜色像素帧缓存

(一)颜色空间

   RGB三色空间

   RGBA颜色空间--额外增加alpha分量;

(二)缓存及其用途

几乎所有的图形程序都有一个共同的目标:就是在屏幕上绘制图像。帧缓存是由矩形的像素数组组成的,每个像素都可以在图像对应的一个点上显示一小块方形的颜色值。经过光栅化的阶段美也就是执行完片元着色器之后,得到的数据还不是一个真正的像素--只是候选的片元。每个片元都包含与像素对应的坐标数据,以及颜色和深度的存储值。

缓存的类型:

        颜色缓存:是我们通常进行绘制的缓存对象,它包含RGB或者sRGB形式的颜色数据。

        深度缓存:可以用来3维空间中物体的可见性,这里深度是物体与观察者眼睛的距离。

        模板缓存:最后还可以使用模板缓存来限制屏幕特定区域的绘制。

glClearColor()

glClearDepth()

glClearDepthf()

glClearStencil()

(三)颜色与OpenGL

片元着色器可以不借助任何“外部”数据直接就生成片元着色器的颜色值;

每个输入的顶点都会提供一个附加的颜色数据;

颜色的补充-不过并不是具体的颜色值-可以在片元着色器中通过计算来生成颜色值;

(四)多重采样

定义:对于几何图元的边缘进行平滑的技术--通常也称反走样。对每个像素的几何图元进行多次采样,此时每个像素不会只保存单个颜色值,而是记录多个样本值,它们类似于更小型的像素,可以用来存储每个位置的颜色、深度和模板值。

加入sample关键字限定着色器的输入变量,那么片元将会在一个像素上执行多次,每次都会输出不同的位置信息。

如果不能用sample关键字修改片元着色器,那么可以用glEnble()启用GL_AMPLE_SHANDING,强制OpenGL使用采样着色的方式。

(五)片元的测试与操作

OpenGL处理管线的顺序为:执行当前绑定的顶点着色器,如果有执行细分和几何着色器-->对图元进行光栅化-->片元着色器

--(本节的几个处理阶段,判断片元是否可以作为像素绘制到缓存中)-->帧缓存

这些操作可以通过glEnable()和glDisable()来启用和禁止。

(1)剪切测试:

片元可见的第一个附加测试,glScissor(),在矩形区域的一个称作一个剪切盒,并使用glEnable()来设置参数。

(2)多重采样的片元操作

考虑alpha(透明度,即颜色分量的第四个值)的计算

(3)模板测试

建立的窗口过程中预先请求模板缓存的前提下模板测试过程中会取像素在模板缓存中的值,然后与一个参考值进行比较。根据测试结果的不同,我们可以对模板缓存的内容进行修改。

使用glStencilFunc()和glStencilOp()命令来完成修改的操作

(4)深度测试

深度缓存主要是用来隐藏表面的消除,如果当前像素值可以通过指定的测试环节,那么它就可以替换当前深度缓存中已有的值。

(5)融混

 如果输入的片元通过了所有的测试,那么他就可以与现有的颜色值进行混合了,其最简单的方式就是直接覆盖,但是这样并不算合并,因此我们可以将帧缓存中已有的颜色与输入的片元颜色进行混合--融混。

    我们可以调用glBlendFunc()并且分别设置两个融混参数。

或者使用glBlendEquationSeparate()可以使用更多的数学方法来我拿出片元颜色与帧缓存像素之间的混合操作。

(6)抖动

提升颜色的分辨率,代价是降低空间分辨率。

(7)逻辑操作

OR\XOR\INVERT

对于位块中传输是非常有用的。

(六)反走样

产生的锯齿问题叫做走样。

OpenGL可以根据每个像素块所覆盖的范围来计算每个片元的覆盖值,用alpha与这个覆盖值相乘,来实现片元与帧缓存的中已有片元的像素的融混操作。

glHint()




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值