我想更改用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);
答案 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);
)对象,但不要让它遮挡它背后的物体。