【问题标题】:Transparency on certain objects only?仅对某些对象透明?
【发布时间】:2019-05-10 11:32:00
【问题描述】:

我已经设法得到一个透明的立方体

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

在 shader.frag 中:

gl_FragColor = vec4(texture2D(TextureMap_uniform, uv).xyz,0.5);

但现在我希望我在透明立方体上方移动的实体模型是不透明的(此时将透明度应用于所有内容)。谁能指出我正确的方向?

【问题讨论】:

  • gl_FragColor = vec4(texture2D(TextureMap_uniform, uv).xyz,0.5); 中的0.5 使它们半透明。改变它(例如,使用制服而不是像答案中推荐的那样)来修改透明度(0.0 -> 不可见,1.0 -> 不透明)。
  • 或者,您可以glDisable(GL_BLEND); 在渲染打算不透明的立方体之前。禁用混合后,alpha 值无效。

标签: c++ opengl transparency alphablending


【解决方案1】:

你使用的是同一个着色器吗? 如果是,那么您需要将每个对象的不透明度信息传递给您的着色器。 一种简单的方法是使用统一变量。

查看这些链接:

https://www.khronos.org/opengl/wiki/Uniform_(GLSL) https://www.khronos.org/opengl/wiki/GLAPI/glUniform

【讨论】:

  • 您刚刚获得了前 10 分代表。 ;-) 为了改进答案,您应该从链接中引用本质。 (链接可能会丢失,并且被认为不能提供重要信息。)
猜你喜欢
  • 2019-03-19
  • 2017-01-18
  • 1970-01-01
  • 1970-01-01
  • 2015-07-23
  • 2020-06-22
  • 2020-12-11
  • 2018-01-27
  • 2013-08-25
相关资源
最近更新 更多