OpenGL纹理覆盖材质颜色

Posted

技术标签:

【中文标题】OpenGL纹理覆盖材质颜色【英文标题】:OpenGL Texture override material color 【发布时间】:2013-08-23 16:33:10 【问题描述】:

我想渲染一个场景并将材质颜色与纹理混合。我正在使用可编程管道和 GLSL,当调用函数 texture() 时,网格的所有部分都希望没有纹理变得透明。 (即使我在最终的 fragColor 中没有使用 vec4)

看下面的截图,在第一张图片中我只有材质颜色,在第二张图片中应用了纹理,但是只有材质颜色的面变得透明..

在我的片段着色器中,我有类似的东西:

vec4 tex = texture(texsampl,fTexCoord);
fFragColor = ambient + (diffuse*tex)  + specular;

【问题讨论】:

无法发布图片,信誉低于 10... =( 【参考方案1】:

只有材质颜色变得透明。

嗯,您正在添加值,这是可以预期的。您应该改用一些混合函数,例如 mix(= s*a + d*(1-a) 其中 s 和 d 是材质和纹理,a 是一些混合因子)或 slerp

【讨论】:

漫反射、镜面反射和环境光组件已经混合在一起,可以作为总和工作。我正在使用 ATI 显卡。大约一分钟前,我在 nvidia 上进行了测试,然后一切正常……所以我认为这是 ATI/AMD opengl 驱动程序的错误…… @bruchuck:可能,但如果没有更多源代码很难说。

以上是关于OpenGL纹理覆盖材质颜色的主要内容,如果未能解决你的问题,请参考以下文章

OpenGL ES纹理

OpenGL:禁用纹理颜色?

如何在OpenGL中反转纹理颜色

OpenGL纹理颜色分离

OpenGL-载入纹理

opengl使用bmp纹理映射画不出东西