OpenglES Blend 笔记

来源:互联网 发布:如何在mac里打开终端 编辑:程序博客网 时间:2024/06/03 21:43

OpenglES 关于 Blend 特性的一些总结:

  1. Blend特性默认是关闭的, 默认开启的特性只有抖动
  2. Blend关闭时,如何进行混色(某种意义上,混色是渲染的一个必经步骤(从OpenglES的流程图上看的话),这个问题也可以表述为如果Blend被disable的话,默认的混色策略是什么)? Wiki上对于Blend被关闭时的混色大概是这样描述的: 在blend被关闭时,src的rgb值会被直接写到Color Buffer中,即src的alpha以及dst的rgba均不会被考虑,可以理解为glBlendFunc(GL_ONE, GL_ZERO)的效果
  3. 上述策略经过测试验证,在glDisable的情况下,即使src的alpha设置为0(完全透明),也依然会被完全不透明的画出来(即alpha的信息完全被忽略了)
  4. glBlendFunc在glEnable(GL_BLEND)前调用可以生效么? 经过测试是可以的。从Opengl状态机模型去理解,BlendFunc和BlendEnable是两个独立的状态,尽管两者之间有依赖关系,但是不代表BlendEnable状态的变化应该影响BlendFunc状态的变化(注意,这里的意思是状态值,而非功能层面,显然在功能发挥上,BlendEnable是会影响BlendFunc)。不过这种用法应该视不标准的,不推荐,你完全可以先glEnable(GL_BLEND)再glBlendFunc,除非有什么特别的原因。
  5. 如果没有进行过glBlendFunc,而仅仅glEnable(GL_BLEND),那么会是什么混合效果? 从测试看是 (GL_ONE, GL_ZERO)。某种意义上讲,可以理解为BlendFunc的初始值是(GL_ONE, GL_ZERO)。这个值的效果和Blend被disable时的效果是一致的。
  6. 关于透明度以及GLSL的一些注意:
    1. GLSL中的变量(本地/varying/uniform),在你没有初始化赋值时,其值可能视任意的(和C/C++相对一致,但是如果你来自Java世界,那么需要记住并适应这一点)
    2. texture2D对一张RGB纹理进行抽样,但是后者返回的是vec4(意味着会携带alpha信息),这种情况下,结果的alpha应该是0(经过测试发现),如果这个时候你使用了(GL_SRC_ALPHA, XXXX), 图像会以透明的形式被画出来。
0 0
原创粉丝点击