【问题标题】:OpenGL ES 2.0 w/ GLKit Transparent TexturesOpenGL ES 2.0 w/ GLKit 透明纹理
【发布时间】:2013-11-05 02:26:30
【问题描述】:

我正在尝试应用纹理(128x128,中间有一个黑色箭头,纹理的其余部分是透明的)。我的模型包含也有颜色数据的顶点。在我应用纹理之前,模型看起来是正确的,每个顶点都包含正确的颜色信息。一旦我应用了纹理,它就会正确显示,到处都有箭头,应该透明的部分是透明的,但模型也是透明的。我希望纹理位于模型的“顶部”,您应该能够透过纹理的透明部分看到模型下方的颜色。请参阅下文了解我在说什么。我还添加了 glEnable(GL_BLEND) 和 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)。

如下图所示,第一张图片带有纹理,第二张图片没有纹理。我希望能够在第一张图像上看到第二张图像的颜色数据。有什么问题?

【问题讨论】:

  • 发布您的着色器代码,假设您使用的是 ES 2 或 3。您使用的是 GLKit 吗?
  • 我正在使用 GLKit,是的。
  • 你在使用背面剔除吗?
  • 不,我不这么认为。

标签: ios opengl-es


【解决方案1】:

混合函数通常用于重叠半透明多边形。根据您的描述,我认为这无关紧要。

听起来您要求从顶点颜色和纹理颜色的 alpha 加权平均值中导出输出颜色。在一个看起来像这样的着色器中:

gl_FragColor = vec4(
  vertexColor.a * vertexColor.rgb + textureColor.a * textureColor.rgb, 1.0);

使用 GLKit 你也许可以通过GLKBaseEffect 达到预期的效果,但我还没有尝试过。文档指出,除了设置纹理坐标之外,您还必须启用 GLKVertexAttribColor。鉴于您的图像,您似乎已经这样做了,因此您可能需要编写自己的着色器。

【讨论】:

  • 正确,我目前正在使用纹理坐标以及启用 GLKVertexAttribColor。我将看看如何使用我也在使用的 GLKBaseEffect 完成片段着色。我从来没有使用过着色器,所以如果可能的话,我会尽量避免这种情况。
  • 使用 GLKit 设置片段颜色的能力依赖于使用 GLKEffectPropertyTexture 上的 envMode 属性。
【解决方案2】:

使用 GLKit 设置片段颜色的能力依赖于使用 GLKEffectPropertyTexture 上的 envMode 属性。这是我之前发布的评论,但现在将其标记为答案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-28
    • 2023-03-11
    • 2011-05-19
    • 1970-01-01
    • 1970-01-01
    • 2012-04-08
    • 1970-01-01
    相关资源
    最近更新 更多