OpenGL ES 2.0绘制多个纹理

艾尔

我相信我的问题很琐碎,我正在使用OpenGL ES 2.0绘制简单的2D场景。
我具有延伸整个屏幕的背景纹理,以及在屏幕上特定位置绘制的花朵的另一种纹理(或者说我说精灵?)。

因此,为什么我能想到的琐碎事是调用glDrawArrays两次,一次调用背景纹理的顶点,另一次调用花纹理的顶点。

那是正确的方法吗?如果是这样,那是否意味着我要打10朵花,要打glDrawArrays10次​​?

那混合呢?如果我想将花朵与背景融合在一起,我既需要背景色又需要花朵像素色怎么办,而两次平局可能不成问题?

还是有可能一口气完成?如果是这样,我如何创建一个着色器,该着色器现在是否正在处理背景纹理顶点或花纹理顶点?

还是有可能一口气完成?     

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

这是我使用一次绘制调用来绘制背景图像的方法,该图像将整个屏幕拉伸,并且花朵的大小以一半为中心。

- (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);
}
史蒂夫

您有两种选择:

  1. 为要绘制的每个纹理调用glDrawArrays,如果您有10-20个以上的纹理,则速度会很慢,以至于您可以使用硬件vbo来加快它的速度
  2. 将要绘制的所有精灵的顶点(顶点,纹理坐标,颜色)批处理为一个数组,并使用纹理图集(具有要绘制的所有图片的纹理),并使用一个glDrawArrays绘制所有这些

第二种方法显然是更好和正确的方法。要了解如何做,请在这里查看我的遮阳篷

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

iOS SDL2 OpenGL ES无法绘制纹理

来自分类Dev

OpenGL ES绘制黑色纹理

来自分类Dev

在OpenGL中绘制多个2D纹理

来自分类Dev

在OpenGL中绘制2D纹理

来自分类Dev

OpenGL ES:纹理平面

来自分类Dev

无法使RGB纹理显示在OpenGL ES2中

来自分类Dev

Android Opengl ES2,颜色代替纹理中的位图

来自分类Dev

旋转了Android OpenGL ES 2纹理象限

来自分类Dev

在opengl es 2中如何释放纹理(ios硬崩溃)

来自分类Dev

缩放纹理opengl 2

来自分类Dev

如何在OpenGL ES 2.0中管理多个纹理?

来自分类Dev

OpenGL ES 3.0。浮点纹理

来自分类Dev

OpenGL ES纹理质量下降

来自分类Dev

OpenGL ES纹理图集失真

来自分类Dev

OpenGL ES-纹理球

来自分类Dev

多个OpenGL ES 2 Android渲染器

来自分类Dev

如何在OpenGL ES 2中处理多个对象

来自分类Dev

Android OpenGL ES2。0VBO无法渲染

来自分类Dev

Java OpenGL 绘制纹理

来自分类Dev

关于OpenGL ES 2的问题

来自分类Dev

OpenGL ES 2:使用其他纹理单元将此图像与当前图像单元混合

来自分类Dev

从顶点计算2D形状的纹理坐标?iOS OpenGL ES

来自分类Dev

使用OpenGL ES 2时Android上纹理中的黑色Alpha

来自分类Dev

OpenGL ES 3.1-无法使用glTexImage2D创建IMMUTABLE纹理

来自分类Dev

OpenGL ES 2.0中的多维数据集不绘制给定的纹理

来自分类Dev

OpenGL ES 2.0渲染透明背景纹理

来自分类Dev

OpenGL ES 2.0纹理不会显示

来自分类Dev

Android OpenGL.ES纹理/图像绘图

来自分类Dev

OpenGL ES无法渲染到纹理