美文网首页
(十一)片段操作

(十一)片段操作

作者: YongtaoHuang | 来源:发表于2019-10-26 18:26 被阅读0次

片段着色器的输出时片段的颜色和深度值。下图中的操作发生在片段着色器执行之后,可能影响像素的可见性和最终颜色。

着色器后的而片段管线.png

缓冲区

OpenGL ES支持3种缓冲区,每种缓冲区都保存帧缓冲区种每个像素的不同数据:
1、颜色缓冲区(包括前后颜色缓冲区)
2、深度缓冲区
3、模板缓冲区

请求更多缓冲区

要在颜色缓冲区之外加入深度或者模板缓冲区,选哟在指定EGL配置属性时请求它们。

esCreateWindow ( &esContext, “Application Name”,
    window_width, window_height,
    ES_WINDOW_RGB | ES_WINDOW_DEPTH |
    ES_WINDOW_STENCIL );

清楚缓冲区

OpenGL ES时一个交互式渲染系统。缓冲区的内容可以通过glClear函数清楚:

void glClear(GLbitfield mask)
void glClearColor( GLfloat red, 
    GLfloat green,
    GLfloat blue, 
    GLfloat alpha)
void glClearDepthf(GLfloat depth)
void glClearStencil(GLint s)

用掩码控制帧缓冲区的写入

可以通过指定一个缓冲区写入掩码来控制哪些缓冲区或者分量可以写入。

void glColorMask(GLboolean red, 
    GLboolean green,
    GLboolean blue, 
    GLboolean alpha)
void glDepthMask(GLboolean depth)
void glStencilMask(GLuint mask)
void glStencilMaskSeparate(GLenum face, 
    GLuint mask)

片段测试和操作

默认情况下,所有片段测试和操作都被禁用,片段在写入帧缓冲区时按照接收它们的顺序变成像素。通过启用不同的片段,可以应用操作性测试,以选择哪些片段成为像素并影响最终的图像。

使用剪裁测试

裁剪测试通过指定一个矩形区域提供额外的裁剪层次。

void glScissor(GLint x, 
    GLint y, 
    GLsizei width,
    GLsizei height)

模板缓冲区测试

模板测试实际上是一个位测试,就像在C程序中使用掩码确定某一位是否置位一样。控制模板测试的运算符和值的模板函数由:

void glStencilFunc(GLenum func, 
    GLint ref, 
    GLuint mask)
void glStencilFuncSeparate(GLenum face,           
    GLenum func,
    GLint ref, 
    GLuint mask)

混合

一旦片段通过了所有启用的片段测试,它的颜色将与片段像素位置种已经存在的颜色组合。在两个颜色组合之前,它们与一个比例因子相乘,然后用指定的混合运算符组合。混合方程式:


颜色混合方程.png

Fsource和Csource分别式输入片段的比例因子和颜色。Fdes和Cdes式像素的比例因子和颜色,op是组合折算值的数学运算符。

void glBlendFunc(GLenum sfactor, 
    GLenum dfactor)
void glBlendFuncSeparate(GLenum srcRGB,     
    GLenum dstRGB,
    GLenum srcAlpha, 
    GLenum dstAlpha)

抖动

由于帧缓冲区中每个分量的位数导致的帧缓冲区中可用颜色数量有限的而系统上,我们可以用抖动模拟更大的色深。

多重采样抗锯齿

抗锯齿是通过尝试减少不同像素渲染中产生的视觉伪像来改进生成图像质量的一种重要技术。

在帧缓冲区读写像素

若想要为后代渲染过的图像,可以从颜色缓冲区中读回像素值,但是不能从深度或者模板缓冲区中读取。当调用glReadPixels时,颜色缓冲区中的像素将从一个前面分配的数组中返回到你的应用程序中。

void glReadPixels(GLint x, 
    GLint y, 
    GLsizei width,
    GLsizei height, 
    GLenum format,
    GLenum type, 
    GLvoid *pixels)

多重渲染目标

多重渲染目标(MRT)允许应用程序一次渲染到多个颜色缓冲区。利用多重渲染目标,片段着色器输出多个颜色,每个颜色用于一个连接的颜色缓冲区。MRT用于多种高级渲染算法中,例如延迟着色和快速环境遮蔽估算。

小结

本章主要讲解有关片段着色器之后发生的测试和操作内容(剪裁矩形测试、模板缓冲区测试、深度缓冲区测试、多重采样、混合和抖动)。

相关文章

  • (十一)片段操作

    片段着色器的输出时片段的颜色和深度值。下图中的操作发生在片段着色器执行之后,可能影响像素的可见性和最终颜色。 缓冲...

  • 片段十一

    乏了,便在一个小书店坐下。 一个穿着褐色灯芯绒西装的留着偏分露出高高发际线的中年男人,在书架前挑书。 我把服装袋放...

  • 麦芒(片段十一)

    色,荡漾,明,金光,形,针芒。 夏。 热浪拂过羽翼,勾起麦芒的雀跃,欢呼,起舞,蒸腾,散发出浓浓甜香,有音乐,有舞...

  • 2018-11-20

    十一月的一些片段

  • 片段二十一

    一块黑色的布,遮住了我的双眼,我开始害怕了,仿佛枪籽儿有一千万种方式射穿我的身体,此时我的心理和生理都感到了恐惧,...

  • 片段二十一

    《飞越疯人院》 But I tried, didn't I? Goddamnit, at least I did ...

  • 【18.11.27】片段十一 喜欢

    几滴混杂着泥土与残渣的汁液沿着带刺的枝桠冉冉滚落,最终滴落在透明的玻璃杯底。 它无力软趴趴地瘫靠在杯壁,零落的花瓣...

  • 十一后思想片段

    1人 神 方 运 药的共同处 方法 通道 连接方式 约定与打赌 2学习与象征 符号 语言具有相似性 那就是连接的非...

  • 写作片段练习(十一)

    时间回到五年前,崇南大学的操场上,一群大一学生正在上体育课,这个学期体育成绩必须要达标,闫悦觉得自己从中考以后就没...

  • Swift - RxSwift的使用详解11(结合操作符:sta

    十一、结合操作(Combining Observables) 结合操作(或者称合并操作)指的是将多个 Observ...

网友评论

      本文标题:(十一)片段操作

      本文链接:https://www.haomeiwen.com/subject/wpagpctx.html