三角形条纹对象的透明度开始2.0

时间:2016-06-17 14:36:55

标签: opengl-es opengl-es-2.0 transparency alpha-transparency

我想更改用glDrawArrays(GL_TRIANGLE_STRIP,0,4)绘制的对象的透明度;

我使用了混合选项,比如

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

(我尝试过这些选项:GL_ONE_MINUS_SRC_ALPHA,GL_ZERO,GL_ONE,GL_ONE_MINUS_DST_COLOR,GL_SRC_ALPHA_SATURATE) 总而言之,我在更改Alpha值时会改变颜色,但不会透明或半透明。 在alpha = 255时,获得明亮的颜色,当alpha = 1时获得黑色但不透明。如果我使alpha = 0,我会得到一个完全透明的。有没有办法给半透明度? (如果我在1到255之间给出alpha,让我们说100,我会得到一个浅色的颜色,但背景对象仍然是不可见的。手段,透明度不可用) 有人会帮忙吗?

以下是我使用的绘图API:

    glUniformMatrix4fv(i32Location, 1, GL_FALSE, afIdentity);
    glEnableVertexAttribArray(VERTEX_ARRAY);
    glVertexAttribPointer(VERTEX_ARRAY, 3, GL_FLOAT, GL_FALSE, 0, 0);
    glEnable(GL_BLEND);
    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
    glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);

1 个答案:

答案 0 :(得分:0)

对于标准" over"想要使用的运算符混合: glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);绘制对象的alpha值然后确定前景的可见程度,即混合操作的结果是:

  

result = new_value * alpha + existing_value *(1-alpha)

如果在背景对象之前绘制透明对象,则需要修改深度测试以查看透明对象后面的对象。如果您不需要对透明对象进行深度测试,或者如果您希望对透明进行深度测试,则可以禁用深度测试(glDisable(GL_DEPTH_TEST);),从而禁用深度测试(glDepthMask(GL_FALSE);)对象,但不要让它遮挡它背后的物体。