我有一个从视差图开始生成3D模型的3D模型可视化器,这是一个示例:
输入:
输出:
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>
这种方法似乎可行,但并非对每个角度(?)都有效,如您在此动画中所注意到的那样:
从上到下倾斜模型会使透明边缘出现或消失,即使alpha通道中没有任何变化,我怀疑深度和透明度或与此相关的问题之间存在问题,但我不知道如何解决这个。你能帮我吗?
答案 0 :(得分:1)
显然,出于我的目的,我不需要任何混合,只需要打开和关闭Alpha,我可以简单地进行替换:
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
使用:
glEnable(GL_ALPHA_TEST);
glAlphaFunc(GL_EQUAL, 1.0);