美文网首页
裁剪、混合【渲染技巧】

裁剪、混合【渲染技巧】

作者: buding_ | 来源:发表于2022-12-27 10:41 被阅读0次

    裁剪

    在OpenGL 中提⾼渲染的⼀种⽅式.只刷新屏幕上发⽣变化的部分.OpenGL 允许将要进⾏渲染的窗⼝只去指定⼀个裁剪框.

    基本原理:⽤于渲染时限制绘制区域,通过此技术可以再屏幕(帧缓冲)指定⼀个矩形区域。启⽤剪裁测试之后,不在此矩形区域内的⽚元被丢弃,只有在此矩形区域内的⽚元才有可能进⼊帧缓冲。因此实际达到的效果就是在屏幕上开辟了⼀个⼩窗⼝,可以再其中进⾏指定内容的绘制。

    //1 开启裁剪测试
    glEnable(GL_SCISSOR_TEST);
    //2.关闭裁剪测试
    glDisable(GL_SCISSOR_TEST);
    //3.指定裁剪窗⼝
     void glScissor(Glint x,Glint y,GLSize width,GLSize height);
    x,y:指定裁剪框左下⻆位置;
    width , height:指定裁剪尺⼨
    

    理解窗⼝,视⼝,裁剪区域
    •窗⼝: 就是显示界⾯
    •视⼝: 就是窗⼝中⽤来显示图形的⼀块矩形区域,它可以和窗⼝等⼤,也可以⽐窗⼝⼤或者⼩。只有绘制在视⼝区域中的图形才能被显示,如果图形有⼀部分超出了视⼝区域,那么那⼀部分是看不到的。通过glViewport()函数设置。
    •裁剪区域(平⾏投影):就是视⼝矩形区域的最⼩最⼤x坐标(left,right)和最⼩最⼤y坐标(bottom,top),⽽不是窗⼝的最⼩最⼤x坐标和y坐标。通过glOrtho()函数设置,这个函数还需指定最近最远z坐标,形成⼀个⽴体的裁剪区域。

    混合

    我们把OpenGL 渲染时会把颜⾊值存在颜⾊缓存区中,每个⽚段的深度值也是放在深度缓冲区。当深度缓冲区被关闭时,新的颜⾊将简单的覆盖原来颜⾊缓存区存在的颜⾊值,当深度缓冲区再次打开时,新的颜⾊⽚段只是当它们⽐原来的值更接近邻近的裁剪平⾯才会替换原来的颜⾊⽚段。

    glEnable(GL_BlEND);
    

    ⽬标颜⾊:已经存储在颜⾊缓存区的颜⾊值
    源颜⾊:作为当前渲染命令结果进⼊颜⾊缓存区的颜⾊值
    当混合功能被启动时,源颜⾊和⽬标颜⾊的组合⽅式是混合⽅程式控制的。在默认情况下,混合⽅程式如下所示:

    Cf = (Cs * S) + (Cd * D)Cf :最终计算参数的颜⾊
    Cs :源颜⾊
    Cd :⽬标颜⾊
    S:源混合因⼦
    D:⽬标混合因⼦
    
    源颜⾊的alpha值越⾼,添加的源颜⾊成分越⾼,⽬标颜⾊所保留的成分就会越少。
    混合函数经常⽤于实现在其他⼀些不透明的物体前⾯绘制⼀个透明物体的效果。
    
    设置混合因⼦,需要⽤到glBlendFun函数
    glBlendFunc(GLenum S,GLenum D);
    S:源混合因⼦
    D:⽬标混合因⼦
    
    混合因子.png
    选择混合⽅程式的函数:
    glbBlendEquation(GLenum mode)
    
    混合⽅程.png

    相关文章

      网友评论

          本文标题:裁剪、混合【渲染技巧】

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