Android OpenGL纹理映射/纹理图集

时间:2014-11-03 22:09:19

标签: android textures opengl-es-2.0 texture-mapping texture-atlas

晚上好晚上

我试图让我的OpenGL程序使用1个纹理(纹理Atlas)。它是256 x 256.我将它加载为普通纹理。

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

enter image description here

问题只是第1和第3个纹理工作。第二个是奇数,第四个似乎是第二个+第三个纹理,第五个是第二个,第三个和第四个放在一起

enter image description here

所以我构建了一个简单的函数来返回纹理坐标

    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

1 个答案:

答案 0 :(得分:1)

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

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