我刚开始接触的OpenGL ES 2.0,我想要做的就是创建一些简单的2D输出。鉴于480×800的分辨率,我怎么可以得出一个背景纹理?

[我开发环境是爪哇/机器人,以便直接与该实施例是最好的,但其它语言就可以了。]

有帮助吗?

解决方案

即使你使用的是Android,我创建了一个实现这个要求在未来的视频帧的iPhone示例应用程序,你可以下载代码从的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);

其他提示

您真的不绘制背景,而不是你画一个矩形(或者,更准确:两个三角形形成一个矩形),并设置一个纹理到。这是在所有的从图纸的任何其他对象在屏幕上没有什么不同。

有很多展示如何做到这一点的地方,也许有更显出这一个Android示例项目。

棘手的部分越来越或后面别的前东西显示。对于这个工作,你需要建立一个深度缓冲,使深度测试(glEnable(GL_DEPTH_TEST))。和你的顶点需要有一个Z坐标(并告诉glDrawElements你的顶点是由三个值,而不是两个)。

如果你不这样做,对象将在次序呈现他们的glDrawElements()函数被调用(意思是无论你得出最后会落得模糊的其余部分)。

我的建议是没有背景的图像或做任何幻想,直到你得到它的窍门。 OpenGL ES 2.0的有怎样的一个陡峭的学习曲线,并在ES 1.x的教程没有真正帮助,让3D来工作,因为他们可以使用的辅助功能,如gluPerspective,其中2.0根本就没有。开始创建就没有什么背景的三角形。接下来,使它成为一个正方形。然后,如果你想要去已经看中,添加纹理。与位置播放。看到当你改变你的顶点的Z值会发生什么。 (提示:不是很多,如果你不具备深度测试启用即使这样,如果你没有透视投影,对象将不会变得更小更远的他们客场,所以它仍然会显得好像什么都没有。发生)

几天后,它不再是那么该死的令人沮丧,你终于“明白”,多。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top