Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 避免alpha值为0的深度缓冲区写入_C++_Opengl - Fatal编程技术网

C++ 避免alpha值为0的深度缓冲区写入

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值大于

我想渲染几个彼此透明的png文件。我只需要alpha值为1或0的“绝对透明度”

这就是我目前遇到的问题,问题是即使alpha值为0,OpenGL仍然会写入深度缓冲区,我如何避免这种情况


我必须用深度值对精灵进行排序吗?我目前正在按纹理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;