You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在OpenGL中同时显示立方体背景色以及两张纹理的颜色

问题原因

  • 你在构造混合纹理色值时手动将alpha硬编码为1.0,传入mix函数的第三个插值参数固定为1,会直接丢弃第一个参数的立方体背景色aColor,导致背景色完全不显示
  • 手动计算RGBA混合的逻辑冗余,且完全丢弃了两张纹理自带的alpha通道信息,没有正确处理纹理透明区域和背景色的叠加逻辑

修正后的片元着色器代码

private final String fragmentShaderCode =
        "precision mediump float;" +
        "uniform sampler2D u_Texture0;" +
        "uniform sampler2D u_Texture1;" +
        "uniform vec4 aColor;" +
        "varying vec2 v_TexCoordinate0;" +
        "varying vec2 v_TexCoordinate1;" +
        "void main() {" +
        // 读取两张纹理的完整色值(含alpha)
        "   vec4 base = texture2D(u_Texture0, v_TexCoordinate0);" +
        "   vec4 overlay = texture2D(u_Texture1, v_TexCoordinate1);" +
        // 先按overlay的alpha混合两张纹理,保留混合后的alpha
        "   vec4 texCombined = mix(base, overlay, overlay.a);" +
        // 再用混合后纹理的alpha作为权重,和立方体背景色混合
        "   vec4 finalColor = mix(aColor, texCombined, texCombined.a);" +
        // 输出最终颜色,alpha可根据需求调整为固定1.0
        "   gl_FragColor = finalColor;" +
        "}";

补充说明

如果你的两张纹理都是完全不透明的(alpha通道全为1),可以手动调整叠加权重控制背景色的透出比例,比如把混合权重改为0.7,就能同时显示70%的纹理内容+30%的立方体背景色:

vec4 finalColor = mix(aColor, texCombined, 0.7);

内容的提问来源于stack exchange,提问作者Bocho

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 04:24:03