glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
GL_ZERO | 因子等于00 |
---|---|
GL_ONE | 因子等于11 |
GL_SRC_COLOR | 因子等于源颜色向量C¯sourceC¯source |
GL_ONE_MINUS_SRC_COLOR | 因子等于1−C¯source1−C¯source |
GL_DST_COLOR | 因子等于目标颜色向量C¯destinationC¯destination |
GL_ONE_MINUS_DST_COLOR | 因子等于1−C¯destination1−C¯destination |
GL_SRC_ALPHA | 因子等于C¯sourceC¯source的alphaalpha分量 |
GL_ONE_MINUS_SRC_ALPHA | 因子等于1−1− C¯sourceC¯source的alphaalpha分量 |
GL_DST_ALPHA | 因子等于C¯destinationC¯destination的alphaalpha分量 |
GL_ONE_MINUS_DST_ALPHA | 因子等于1−1− C¯destinationC¯destination的alphaalpha分量 |
GL_CONSTANT_COLOR | 因子等于常数颜色向量C¯constantC¯constant |
GL_ONE_MINUS_CONSTANT_COLOR | 因子等于1−C¯constant1−C¯constant |
GL_CONSTANT_ALPHA | 因子等于C¯constantC¯constant的alphaalpha分量 |
GL_ONE_MINUS_CONSTANT_ALPHA | 因子等于1−1− C¯constantC¯constant的alphaalpha分量 |
问题:半透明和深度测试的矛盾——深度测试不知道半透明物体是透明的!——
不要打乱顺序
- 先绘制所有不透明的物体。
- 对所有透明的物体排序。
- 按顺序绘制所有透明的物体。
排序透明物体的一种方法是,从观察者视角获取物体的距离。这可以通过计算摄像机位置向量和物体的位置向量之间的距离所获得。接下来我们把距离和它对应的位置向量存储到一个STL库的map数据结构中。map会自动根据键值(Key)对它的值排序,所以只要我们添加了所有的位置,并以它的距离作为键,它们就会自动根据距离值排序了。