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

OpenGL ES 3D立方体单面贴双纹理时其余面显示异常问题求助

问题根因

你仅为立方体正面的4个顶点配置了纹理坐标,立方体剩余的5个面共20个顶点未配置有效纹理坐标,OpenGL绘制时会读取对应内存区域的脏数据作为纹理坐标进行采样,因此会出现异常纹理效果。你此前添加的GL_CLAMP_TO_EDGE配置仅能处理合法纹理坐标超出[0,1]范围时的采样逻辑,无法解决纹理坐标本身为无效脏值的问题。

可选用的解决方案

  • 方案1:补全所有面的纹理坐标
    为立方体剩余5个面的顶点补充纹理坐标,如果其他面不需要显示纹理,可以统一将非正面的纹理坐标设置为固定值(比如(0,0)),采样纹理对应位置的固定颜色即可,参考代码如下:
    private float textureCord[] = {
            // Front face 正面纹理坐标,保留原有配置
            1.2f, 1.2f,
            1.2f, -0.2f,
            -0.2f, -0.2f,
            -0.2f, 1.2f,
            // 背面纹理坐标
            0f,0f, 0f,0f, 0f,0f, 0f,0f,
            // 左面纹理坐标
            0f,0f, 0f,0f, 0f,0f, 0f,0f,
            // 右面纹理坐标
            0f,0f, 0f,0f, 0f,0f, 0f,0f,
            // 顶面纹理坐标
            0f,0f, 0f,0f, 0f,0f, 0f,0f,
            // 底面纹理坐标
            0f,0f, 0f,0f, 0f,0f, 0f,0f
    };
    
  • 方案2:着色器层面控制非正面不采样纹理
    新增顶点属性标记是否为正面顶点,在片元着色器中判断,非正面直接输出固定纯色,不走纹理采样逻辑,参考代码如下:
    顶点着色器:
    attribute vec4 aPosition;
    attribute vec2 aTexCoord;
    attribute float aIsFront;
    varying vec2 vTexCoord;
    varying float vIsFront;
    uniform mat4 uMVPMatrix;
    void main() {
        gl_Position = uMVPMatrix * aPosition;
        vTexCoord = aTexCoord;
        vIsFront = aIsFront;
    }
    
    片元着色器:
    precision mediump float;
    varying vec2 vTexCoord;
    varying float vIsFront;
    uniform sampler2D uTexture1;
    uniform sampler2D uTexture2;
    void main() {
        if (vIsFront > 0.5) {
            // 此处保留原有正面双纹理叠加逻辑
            vec4 color1 = texture2D(uTexture1, vTexCoord);
            vec4 color2 = texture2D(uTexture2, vTexCoord);
            gl_FragColor = mix(color1, color2, 0.5);
        } else {
            // 非正面直接输出指定纯色,可自行修改RGBA值
            gl_FragColor = vec4(0.6f, 0.6f, 0.6f, 1.0f);
        }
    }
    
  • 方案3:分批次绘制立方体
    先关闭纹理采样,绘制除正面之外的5个面输出纯色;再开启纹理采样,单独绘制正面并叠加双纹理效果,无需修改纹理坐标数组和着色器逻辑。

内容的提问来源于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:54:05