Android OpenGL纹理映射/纹理图谱

Android OpenGL纹理映射/纹理图谱,android,textures,opengl-es-2.0,texture-mapping,texture-atlas,Android,Textures,Opengl Es 2.0,Texture Mapping,Texture Atlas,大家晚上好 我试图让我的OpenGL程序使用1纹理(纹理图集)。它是256 x 256。我加载它作为一个正常的纹理 如果纹理是从0,0到1,1,那么我相信每个正方形的大小是0.2 本期仅为第1期和第3期纹理作品。第二个是奇数,第四个似乎是第二+第三个纹理,第五个是第二、第三和第四个纹理 因此,我构建了一个简单的函数来返回纹理坐标 int yy = textureId / 5; int xx = textureId % 5; float size = 1.0f / 5;

大家晚上好

我试图让我的OpenGL程序使用1纹理(纹理图集)。它是256 x 256。我加载它作为一个正常的纹理

如果纹理是从0,0到1,1,那么我相信每个正方形的大小是0.2

本期仅为第1期和第3期纹理作品。第二个是奇数,第四个似乎是第二+第三个纹理,第五个是第二、第三和第四个纹理

因此,我构建了一个简单的函数来返回纹理坐标

    int yy = textureId / 5;
    int xx = textureId % 5;
    float size = 1.0f / 5;

    float[] textureCoordinateDataMap = createTexture(size * xx,size * yy ,size, size );


    public float[]createTexture(float x, float y, float xx, float yy)
    {
         float[] textureCoordinateDataMap =
                 {
                         // Front face
                         x, y,
                         x, yy,
                         xx, y,
                         x, yy,
                         xx, yy,
                         xx, y,

                         // Right face
                         x, y,
                         x, yy,
                         xx, y,
                         x, yy,
                         xx, yy,
                         xx, y,

                         // Back face
                         x, y,
                         x, yy,
                         xx, y,
                         x, yy,
                         xx, yy,
                         xx, y,

                         // Left face
                         x, y,
                         x, yy,
                         xx, y,
                         x, yy,
                         xx, yy,
                         xx, y,

                         // Top face
                         x, y,
                         x, yy,
                         xx, y,
                         x, yy,
                         xx, yy,
                         xx, y,

                         // Bottom face
                         x, y,
                         x, yy,
                         xx, y,
                         x, yy,
                         xx, yy,
                         xx, y,
                 };

        return textureCoordinateDataMap;
    }
我试着硬编码这些值,唯一有效的是 0,0 0.4,0 0,0.4
0.4,0.4

如果要使用此数组中的值作为纹理坐标,则需要将大小添加到左/下坐标以获得右/上坐标。现在,您使用大小本身作为右/顶坐标。一种方法是在函数调用中添加大小:

float[] textureCoordinateDataMap = createTexture(
     size * xx, size * yy , size (xx + 1), size * (yy + 1));