且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

如何在 iPhone 上的 OpenGL ES 2.0 中混合具有不同坐标的两个纹理?

更新时间:2023-08-30 13:50:52

你必须将2个纹理坐标传递给shader并修改shader

You have to pass 2 texture coordinates to shader and modify shader

添加到ObjectiveC

Add to ObjectiveC

glVertexAttribPointer(inputTextureCoordinate2, 2, GL_FLOAT, 0, 0, textureCoordinates2);

顶点着色器

attribute vec4 position;
attribute vec4 inputTextureCoordinate;
attribute vec4 inputTextureCoordinate2;

varying vec2 textureCoordinate;
varying vec2 textureCoordinate2;

void main()
{
    gl_Position = position;
    textureCoordinate = inputTextureCoordinate.xy;
    textureCoordinate2 = inputTextureCoordinate2.xy;
}

片段着色器

varying highp vec2 textureCoordinate;
varying highp vec2 textureCoordinate2;

uniform sampler2D inputTextureTop;
uniform sampler2D inputTextureBot;

uniform highp float alphaTop;

void main()
{
    lowp vec4 pixelTop = texture2D(inputTextureTop, textureCoordinate);
    lowp vec4 pixelBot = texture2D(inputTextureBot, textureCoordinate2);

    gl_FragColor = someBlendOperation(pixelTop, pixelBot);
}

顺便说一句,inputTextureCoordinate 不一定是 vec4,但它可以是 vec2

BTW inputTextureCoordinate is not necessary to be vec4 but it could be vec2