C++ 避免alpha值为0的深度缓冲区写入
我想渲染几个彼此透明的png文件。我只需要alpha值为1或0的“绝对透明度” 这就是我目前遇到的问题,问题是即使alpha值为0,OpenGL仍然会写入深度缓冲区,我如何避免这种情况C++ 避免alpha值为0的深度缓冲区写入,c++,opengl,C++,Opengl,我想渲染几个彼此透明的png文件。我只需要alpha值为1或0的“绝对透明度” 这就是我目前遇到的问题,问题是即使alpha值为0,OpenGL仍然会写入深度缓冲区,我如何避免这种情况 我必须用深度值对精灵进行排序吗?我目前正在按纹理id对精灵进行分组,以减少纹理状态的更改。按深度值排序肯定会增加纹理状态的变化。您可以使用alpha测试 glEnable(GL_ALPHA_TEST); glAlphaFunc(GL_GREATER, threshold); 它仅在传入像素的alpha值大于
我必须用深度值对精灵进行排序吗?我目前正在按纹理id对精灵进行分组,以减少纹理状态的更改。按深度值排序肯定会增加纹理状态的变化。您可以使用alpha测试
glEnable(GL_ALPHA_TEST);
glAlphaFunc(GL_GREATER, threshold);
它仅在传入像素的alpha值大于阈值时绘制像素
这在较新的OpenGL版本中已被弃用,但可以通过向片段着色器添加类似的内容来轻松模仿:
if (col.a <= threshold)
discard;
if(col.a)我不知道你的问题的答案,但总的来说这似乎是错误的解决方案……是否可以将所有精灵都打包到一个纹理中?
if (col.a <= threshold)
discard;