代码之家  ›  专栏  ›  技术社区  ›  Andrew Pouliot

用第三个纹理插值两个纹理(因子是亮度,而不是阿尔法)

  •  2
  • Andrew Pouliot  · 技术社区  · 16 年前

    我在计算CPU上每帧的C纹理并上传它时取得了一定的成功 glTexImage2D 转化为仅阿尔法纹理。

    /RGB信息,不是 .

    如何有效地将其转换为需要插入纹理管道的alpha纹理?请记住,iPhone上没有可编程的管道(着色器),只有两个纹理单元可用。

    1 回复  |  直到 15 年前
        1
  •  6
  •   Frogblast    16 年前

    假设纹理A和B是RGB图像,那么也许你可以将其中一个纹理制作成RGBA图像,并在一个图像的alpha通道中渲染蒙版。这使您在iPhone的两个纹理单元的限制范围内,允许您在一次通过中完成此操作,而无需混合。

    vec4 a = texture2D(textureA, texcoord);
    vec4 b = texture2D(textureB, texcoord);
    gl_FragColor = vec4(a.rgb * a.a + b.rgb * (1-a.a), dont_care.a);
    

    单元0的纹理环境:(对RGB图像B进行采样,并将其传递到下一阶段)

    glActiveTexture(GL_TEXTURE0);
    glBindTexture(GL_TEXTURE_2D, textureB);
    glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
    

    Cp 以及“Ap”来源。A在“Cs”中可用。面具在“As”中可用。见德国劳埃德船级社规范中的表3.15)。

    glActiveTexture(GL_TEXTURE1);
    glBindTexture(GL_TEXTURE_2D, textureA);
    glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);