OpenGL ES 2.0绘制多个纹理

我相信我的问题很琐碎,我使用OpenGL ES 2.0绘制一个简单的2D场景。
我有一个背景纹理,它延伸了整个屏幕和另一个在屏幕上的特定位置绘制的花朵的纹理(或我称之为精灵?)。

所以为什么我可以想到做这件事很简单,就是调用glDrawArrays两次,一次使用背景纹理的顶点,另一次使用花纹理的顶点。

这是正确的方式吗? 如果是这样,这是否意味着10个花我需要调用glDrawArrays 10次​​?

那混合怎么样? 如果我想将花与背景混合在一起,那么我需要背景和花卉像素颜色,这可能是两张画不合适的问题?

或者是否可以在一次抽签中完成? 如果是的话我怎么能创建一个着色器,知道它是否正在处理背景纹理顶点或花纹理顶点?

或者是否可以在一次抽签中完成?

一个绘制的问题是着色器需要知道当前顶点是否是背景顶点(比使用背景纹理颜色)还是花顶点(比使用花纹理颜色),并且我不知道该怎么做它。

下面是我如何使用一个绘制调用来绘制背景图像拉伸整个屏幕,并且花是半尺寸居中的。

- (void)renderOnce {
    //... set program, clear color..

    glActiveTexture(GL_TEXTURE2);
    glBindTexture(GL_TEXTURE_2D, backgroundTexture);
    glUniform1i(backgroundTextureUniform, 2);

    glActiveTexture(GL_TEXTURE3);
    glBindTexture(GL_TEXTURE_2D, flowerTexture);
    glUniform1i(flowerTextureUniform, 3);

    static const GLfloat allVertices[] = {
        -1.0f, -1.0f, // background texture coordinates
        1.0f, -1.0f,  // to draw in whole screen
        -1.0f,  1.0f, //
        1.0f,  1.0f,

        -0.5f, -0.5f, // flower texture coordinates
        0.5f, -0.5f,  // to draw half screen size
        -0.5f,  0.5f, // and centered
        0.5f,  0.5f,  //
    };

    // both background and flower texture coords use the whole texture
    static const GLfloat backgroundTextureCoordinates[] = {
        0.0f, 0.0f,
        1.0f, 0.0f,
        0.0f, 1.0f,
        1.0f, 1.0f,
    };

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

    glVertexAttribPointer(positionAttribute, 2, GL_FLOAT, 0, 0, allVertices);
    glVertexAttribPointer(backgroundTextureCoordinateAttribute, 2, GL_FLOAT, 0, 0, backgroundTextureCoordinates);
    glVertexAttribPointer(flowerTextureCoordinateAttribute, 2, GL_FLOAT, 0, 0, flowerTextureCoordinates);

    glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
}

你有两个选择:

  • 为每个要绘制的纹理调用glDrawArrays,如果你有超过10-20个纹理,这将会很慢,加速它认为你可以使用硬件vbo
  • 批量绘制您想要在一个数组中绘制的所有精灵的顶点(顶点,纹理坐标,颜色),并使用纹理图集(具有所有要绘制的图片的纹理),并使用一个glDrawArrays
  • 第二种方式显然是更好更合适的方法。要想知道如何去做,请在这里看看我的维修人员

    链接地址: http://www.djcxy.com/p/33975.html

    上一篇: OpenGL ES 2.0 drawing more than one texture

    下一篇: OpenGL VBO drawing with multitexturing issue