GL_BLEND无法与Vertex Array一起正常使用

时间:2018-06-26 18:04:28

标签: c++ opengl glut alpha-transparency

我有一个从视差图开始生成3D模型的3D模型可视化器,这是一个示例:

输入:

enter image description here enter image description here

输出:

enter image description here

3D可视化工具是用OpenGL和GLUT编写的,特别是整个代码可以在这里找到:

https://github.com/lpuglia/DisparityVisualizer

使用GL_TRIANGLE_STRIP中的GL_VERTEX_ARRAY构建模型。本文介绍了一种重现我的模型的方法:

http://www.learnopengles.com/tag/vbos/

特别是我将以下代码用作显示功能:

glEnableClientState( GL_VERTEX_ARRAY );
glEnableClientState( GL_COLOR_ARRAY );
glVertexPointer( 3, GL_FLOAT, 0, vertices );
glColorPointer( 4, GL_FLOAT, 0, colors );
glDrawElements( GL_TRIANGLE_STRIP, getIndicesCount(width,height), GL_UNSIGNED_INT, indices );
glDisableClientState( GL_VERTEX_ARRAY );
glDisableClientState( GL_COLOR_ARRAY );

我在使用此代码进行初始化时遇到了透明度管理方面的问题:

glEnable (GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_DEPTH_TEST);

您可能已经注意到glColorPointer函数用于4个通道,实际上,我使用第4个通道设置对象边缘点的alpha(此处标记为蓝色):< / p>

enter image description here

这种方法似乎可行,但并非对每个角度(?)都有效,如您在此动画中所注意到的那样:

enter image description here

从上到下倾斜模型会使透明边缘出现或消失,即使alpha通道中没有任何变化,我怀疑深度和透明度或与此相关的问题之间存在问题,但我不知道如何解决这个。你能帮我吗?

1 个答案:

答案 0 :(得分:1)

显然,出于我的目的,我不需要任何混合,只需要打开和关闭Alpha,我可以简单地进行替换:

glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

使用:

glEnable(GL_ALPHA_TEST);
glAlphaFunc(GL_EQUAL, 1.0);