0

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

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

有质感 没有质感

4

2 回答 2

0

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

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

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

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

于 2013-10-25T21:23:16.233 回答
0

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

于 2013-10-29T18:16:39.000 回答