opengl-es – 如何在OpenGL ES 2.0中绘制纹理作为2D背景?

我刚刚开始使用OpenGL ES 2.0,我想做的是创建一些简单的2D输出。给定分辨率为480×800,如何绘制背景纹理?

[我的开发环境是Java / Android,所以直接相关的示例将是最好的,但是其他语言会很好。]

即使你在Android上,我创建了一个iPhone示例应用程序,为视频帧进行。您可以从here下载此示例的代码。我有一个关于这个应用程序的写作,它基于颜色的对象跟踪使用实时视频,您可以阅读here

在这个应用程序中,我绘制两个三角形生成一个矩形,然后使用以下坐标的纹理:

   static const GLfloat squareVertices[] = {
        -1.0f, -1.0f,
        1.0f, -1.0f,
        -1.0f,  1.0f,
        1.0f,  1.0f,
    };

    static const GLfloat textureVertices[] = {
        1.0f, 1.0f,
        1.0f, 0.0f,
        0.0f,  1.0f,
        0.0f,  0.0f,
    };

要通过视频帧作为纹理,我使用一个简单的程序与以下顶点着色器:

attribute vec4 position;
attribute vec4 inputTextureCoordinate;

varying vec2 textureCoordinate;

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

和以下片段着色器:

varying highp vec2 textureCoordinate;

uniform sampler2D videoFrame;

void main()
{
    gl_FragColor = texture2D(videoFrame, textureCoordinate);
}

绘图是使用正确的程序的一个简单的事情:

glUseProgram(directDisplayProgram);

设置纹理均匀:

glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, videoFrameTexture);

glUniform1i(uniforms[UNIFORM_VIDEOFRAME], 0);   

设置属性:

glVertexAttribPointer(ATTRIB_VERTEX, 2, GL_FLOAT, 0, 0, squareVertices);
glEnableVertexAttribArray(ATTRIB_VERTEX);
glVertexAttribPointer(ATTRIB_TEXTUREPOSITON, 2, GL_FLOAT, 0, 0, textureVertices);
glEnableVertexAttribArray(ATTRIB_TEXTUREPOSITON);

然后绘制三角形:

glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
翻译自:https://stackoverflow.com/questions/4036737/how-to-draw-a-texture-as-a-2d-background-in-opengl-es-2-0

转载注明原文:opengl-es – 如何在OpenGL ES 2.0中绘制纹理作为2D背景?