关于OpenGL透明纹理渲染出来效果不正确的问题
2018-03-21 14:35
1421 查看
项目中曾遇到过多次透明图片经过OpenGL渲染之后或者图片颜色偏黑出现色差或者透明区域呈现黑色,不是透明状态。这种情况的出现多是由于glBlendFunc设置的有问题造成的。其默认的设置是glBlendFunc(GL_ONE, GL_ZERO);通过glBlendFunc可以设置纹理的Blend方式,其第一个参数代表源因子,第二个参数代表目标因子,这里把将要画上去的颜色称为源颜色,把原来的颜色称为目标颜色,混合出的颜色结果为:源颜色 * 源因子 + 目标颜色 * 目标因子,其可能的值为一下几种:GL_ZERO: 表示使用0.0作为因子,实际上相当于不使用这种颜色参与混合运算。
GL_ONE: 表示使用1.0作为因子,实际上相当于完全的使用了这种颜色参与混合运算。
GL_SRC_ALPHA:表示使用源颜色的alpha值来作为因子。
GL_DST_ALPHA:表示使用目标颜色的alpha值来作为因子。
GL_ONE_MINUS_SRC_ALPHA:表示用1.0减去源颜色的alpha值来作为因子。
GL_ONE_MINUS_DST_ALPHA:表示用1.0减去目标颜色的alpha值来作为因子。而我们想要正常渲染出透明纹理的效果则需要设置glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
GL_ONE: 表示使用1.0作为因子,实际上相当于完全的使用了这种颜色参与混合运算。
GL_SRC_ALPHA:表示使用源颜色的alpha值来作为因子。
GL_DST_ALPHA:表示使用目标颜色的alpha值来作为因子。
GL_ONE_MINUS_SRC_ALPHA:表示用1.0减去源颜色的alpha值来作为因子。
GL_ONE_MINUS_DST_ALPHA:表示用1.0减去目标颜色的alpha值来作为因子。而我们想要正常渲染出透明纹理的效果则需要设置glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
相关文章推荐
- 关于Opengl中将24位BMP图片加入�一个alpha通道并实现透明的问题
- 关于Firefox中的Flash不可以显示透明效果的问题
- 关于graphical layout 效果显示不出来的问题。求解
- 【C#/OpenGL】CSGL中2D纹理加载PNG等透明图片显示的黑边问题
- 关于Opengl中将24位BMP图片添加一个alpha通道并实现透明的问题
- 关于在wince6.0 S5pv210 上显示png 文件透明效果问题
- OpenGL关于纹理和基本图形的混合问题
- 关于Opengl中将24位BMP图片加入一个alpha通道并实现透明的问题
- 关于MO打印时不能正确打印用DC自己画出来的图片的问题的解决方案
- 关于Opengl中将24位BMP图片加入一个alpha通道并实现透明的问题
- 关于Firefox中的Flash不可以显示透明效果的问题
- 关于OPENGL坐标的问题(转)
- 使用滤镜解决IE6下png图片不能透明(被渲染成默认色)的问题
- 关于VS2010中配置cocos2d-x ,出现OpenGL version too old 问题的解决办法
- 关于NeHe OpenGL网站代码运行问题
- Struts2对值栈中的List便利,格式都正确却遍历不出来数据的问题
- 关于自定义dialog动态设置宽度没有效果问题
- 关于IAR for stm8 printf打印不正确的问题
- 渲染世界的OPENGL<13>纹理进阶-矩形及立方体贴图
- 关于LayUI加上form.render()下拉框和单选以及复选框不出来的问题