【问题标题】:GLKit Polygon TranslucencyGLKit 多边形半透明
【发布时间】:2012-09-14 15:54:32
【问题描述】:

我正在尝试使用 GLKit 绘制半透明多边形,但没有运气。所以我想知道是否有可能首先在 GLKit 中使用半透明多边形,因为我知道 OpenGL 的标准实现不支持它;但可以使用自定义着色器进行模仿。但是由于 GLKit 编译它自己的着色器,我需要知道我应该继续使用 GLKit 还是使用我自己的自定义着色器。我的代码如下:

// setup states
glEnable(GL_BLEND);
glBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

self.effect.texture2d0.enabled   = GL_FALSE;
self.effect.colorMaterialEnabled = GL_TRUE;
self.effect.transform.modelviewMatrix = self.modelMatrix;

glEnableVertexAttribArray(GLKVertexAttribPosition);
glEnableVertexAttribArray(GLKVertexAttribColor);

[self.effect prepareToDraw];

// draw triangles
glVertexAttribPointer(GLKVertexAttribPosition, 3, GL_FLOAT, GL_FALSE, sizeof(LineVertex), &_vertices[0].pos);
glVertexAttribPointer(GLKVertexAttribColor, 4, GL_FLOAT, GL_FALSE, sizeof(LineVertex), &_vertices[0].color);

glDrawArrays(GL_TRIANGLES, 0, _vertexCount);

提前致谢。

【问题讨论】:

  • 澄清一下,你的意思是translucency,还是透明度?
  • 半透明 - 我知道如何使多边形不透明或透明;但我不知道如何让它正确地拥有 0.5 alpha。问题实际上来自于两个 0.5 alpha 多边形相互重叠而不会产生 1.0 alpha 交点。
  • 透明并不意味着不可见,事物可以是部分透明的。半透明意味着半透明物体后面的光线模糊或扩散。半透明可能是 OpenGL 中难以实现的技术,而透明度(完全或部分)得到很好的支持。您描述的问题听起来像是透明度问题。
  • 感谢蒂姆让我朝着正确的方向前进;经过一些研究后将更新此帖子

标签: objective-c ios opengl-es opengl-es-2.0 glkit


【解决方案1】:

您的问题令人困惑,但听起来您的透明对象相互重叠?如果是这样,请使用

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

而不是你在那里得到的。

并检查诸如深度测试或模板测试之类的事情(不太可能但可能)不会阻止绘制事物...

【讨论】:

    【解决方案2】:

    问题原来是我早些时候在某个地方使用了 glEnable(GL_DEPTH_TEST),它在 alpha 0.5 处停止了两个多边形,创建了与 alpha 1.0 的交集。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-12
      • 1970-01-01
      • 1970-01-01
      • 2020-08-10
      • 1970-01-01
      • 1970-01-01
      • 2023-03-11
      • 1970-01-01
      相关资源
      最近更新 更多