gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 06:25:10 26 4
gpt4 key购买 nike

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

[我的开发环境是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);

关于opengl-es - 如何在 OpenGL ES 2.0 中绘制纹理作为 2D 背景?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4036737/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com