Fla*_*njd 1 c++ opengl alpha-transparency
我正在使用OpenGL加载位图来纹理3d网格.其中一些位图具有某些像素的alpha通道(透明度),我需要找出最佳方法
和
有没有人有这方面的好例子?OpenGL支持这个吗?
首先,通常最好将位图数据转换为32位,以便每个通道(R,G,B,A)获得8位.上传纹理时,请指定32位格式.
然后在渲染时,您需要glEnable(GL_BLEND);并设置混合函数,例如:glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);.这告诉OpenGL使用纹理的alpha将纹理的RGB与背景的RGB混合.
如果您对3D对象执行此操作,您可能还需要关闭背面剔除(以便通过前面看到对象的背面)并将三角形从后向前排序(以便混合发生以正确的顺序).
如果源位图是8位(即:使用指定为透明度蒙版的一种颜色的调色板),则将其转换为RGBA可能最容易,当颜色与透明度蒙版匹配时,将alpha值设置为0.
一些提示使事情(也许)看起来更好: