opengles2.0 片段shader之后的操作 备忘

各种测试的顺序:
 
    剪刀测试-模板测试-深度测试-混合-抖动


opengles支持三种帧缓存,颜色,深度,模板缓存。

    颜色缓存一个有16位的RGB565和32位的RGBA,颜色缓存有前后缓存

    模板缓存是可选的,要么集成在深度缓存里面

    深度缓存至少16为,至少8为被模板缓存。


 缓存的clear:
 
     void glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);

     void glClearColor(red,green,blue,alpha);
     void glClearDepthf(depth);
     void glClearStencil(GLint S);

     void glColorMask(BOOL red,bool green, bool blue, bool alpha);

        控制是否能写入这些颜色组件。

     void glDepthMask(bool depth);
     void glStencilMask(GLuint mask);这是一个bitmask,为1的位能写入。
     void glStencilMaskSeparate(GLenum face,GLuint mask);

       face 取值为GL_FRONT,GL_BACK,GL_FRONT_AND_BACK.

 各种测试的开启:
 
     glEnbale();
     GL_DEPTH_TEST,GL_STENCIL_TEST, GL_BLEND, GL_DITHER, GL_SAMPLE_COVARAGE,
     GL_SAMPLE_ALPHA_TO_COVARAGE,
   
      GL_SCISSOR_TEST

  剪刀测试:
      glScissor(GLint x,GLint y,GLsizei width,GLsizei height);指定的是在视口里面的坐标

  模板测试:
      这个分为两步进行,第一步,给模板缓存填充值,就是在渲染几何物体的时候进行的,需要知道模板
      缓存中的值如何被写入,第二步,就是通过这些模板缓存中的值,控制颜色缓存的写入。
      模板测试是一种位测试,

      在程序开始的时候glClearStencil指定clear值,然后glClear清除模板缓存,这样模板缓存就有个
      初始值了。然后使用:
    
      void glStencilFunc(GLenum func,GLint ref,GLuint mask);
         func:设置比较函数

             GL_EQUAL,GL_NOTEQUAL,GL_LESS,GL_GREATER,

             GL_LEQUAL,GL_GEQUAL,GL_ALWAYS,
             GL_NEVER.
    ref:设置做比较的值。
    mask:将这个值和模板缓冲中的值做位与操作,在拿结果在与ref做比较。
   
    模板缓存中的值与mask按位与之后与ref比较,若符合func指定的比较函数,则模板测试通过。

    还可以有个机会更新模板缓存中的值。怎么更新模板缓存中的值呢?
    有三种情况:
   
        第一模板测试失败,后面的片段操作都不进行了,可以更新模板缓存。

        第二,模板测试通过,但深度测试没有通过,可以更新模板缓存。
 
        第三,模板测试和深度测试都通过了,可以更新模板缓存

        这三种情况怎么更新模板缓存,通过一个函数glStencilOp设置。
 
        glStencilOp(GLenum sfail,GLenum zfail,GLenum zpass);
        这三个枚举的取值为这些:
         GL_KEEP,保持不变
         GL_ZERO,设置为0,
         GL_REPLACE, 使用ref替换
         GL_INCR, 使模板缓存中的值加1,值clamp到0-2^n次方
         GL_DECR, 减1
         GL_INCR_WRAP 同上面的一样,只是值到最大的时候加1的话回到0.
         GL_DECR_WRAP,
         GL_INVERT. 对模板缓存中的值位取反。

        sfail:表示模板测试失败之后,怎么更新模板缓存中的值

        zfail:表示模板测试通过,深度测试失败时怎么更新模板缓存中的值。
 

        zpass:表示 模板测试和深度测试都通过之后怎么设置模板缓存中的值。


  深度测试:
  
      glEnable(GL_DEPTH_TEST);
      glDepthFunc(GLenum func);
      GL_GREATER,GL_LEQUAL,GL_GEQUAL,GL_EQUAL,GL_NOTEQUAL,GL_ALWAYS,GL_NEVER。


  混合:
  
      glEnable(GL_BLEND);
      混合公式:
          最后的颜色值=源因子*到来的颜色 OP  目的因子*在颜色缓存的值。

      源因子和目的因子有一个函数指定:
          glBlendFunc(GLenum sfactor,GLenum dfactor);
 
       可以取这些值:
       GL_ZERO
       GL_ONE
       GL_SRC_COLOR
       GL_ONE_MINUS_SRC_COLOR
       GL_SRC_ALPHA
       GL_ONE_MINUS_SRC_ALPHA
       GL_DST_COLOR
       GL_ONE_MINUS_DST_COLOR
       GL_DST_ALPHA
       GL_ONE_MINUS_DST_ALPHA
       GL_CONSTANT_COLOR
       GL_ONE_MINUS_CONSTANT_COLOR
       GL_SRC_ALPHA_SATURATE   MIN(As,1-Ad) alpha取1.
   
    这里有个GL_CONSTANT_COLOR,使用函数void glBlendColor(r,g,b,a);来指定。

    OP使用这个函数来指定:
 
       glBlendEquation(GLenum mode);
       GL_FUNC_ADD,
       GL_FUNC_SUBTRACT,
       GL_FUNC_REVERSE_SUBTRACT. 这个取GL_FUNC_SUBTRACT结果的相反数。

 

  抖动:
      这个只有开启和关闭的函数,具体用的什么算法,依赖于设备。

 


  读取颜色缓存中的值到内存:
  
      void glReadPixels(x,y,width,height,format,type,void* pixels);
 

 

 

 

 

 

 

 

 

 

 

 

 


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
OpenGL ES 2.0是一种图形编程接口,用于开发移动设备上的2D和3D图形应用程序。由于其高效性、跨平台性和灵活性,它成为许多手机游戏和应用程序的首选。 要下载OpenGL ES 2.0,首先需要考虑的是您使用的平台。通常,OpenGL ES 2.0可以在Android、iOS和Windows等操作系统上使用。 对于Android设备,您可以在Google Play商店上搜索“OpenGL ES 2.0”并下载适用于您的设备的OpenGL ES 2.0开发工具包(SDK)。您还可以通过在计算机上安装Android开发套件(SDK)并使用Android Studio或Eclipse等IDE来开发OpenGL ES 2.0应用程序。 对于iOS设备,OpenGL ES 2.0通常已经预装在iOS系统中,无需单独下载。您可以使用Xcode IDE来开发在iOS设备上运行的OpenGL ES 2.0应用程序。 对于Windows操作系统,您可以通过访问Khronos Group的官方网站来下载OpenGL ES 2.0的开发工具包(SDK)。您可以选择从官方提供的软件包中选择适用于您的Windows版本。 除了操作系统特定的下载之外,您还可以在各种开发者论坛、网站和教程上找到OpenGL ES 2.0的相关示例代码和资源。这些资源可以帮助您更好地了解和使用OpenGL ES 2.0来开发高质量的图形应用程序。 总之,要下载OpenGL ES 2.0,您需要根据您使用的平台选择适当的开发工具包或SDK。随后,您可以使用IDE和其他资源开始在您的设备上开发出色的OpenGL ES 2.0应用程序。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值