0

晚上好所有Android OpenGL纹理映射/纹理地图集

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

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

enter image description here

的问题是只有第一和第三质感的工作。第二个是奇数,第4似乎是第2 + 3的质地和5日是第2,第3和第4放在一起

enter image description here

所以我建了一个简单的函数返回纹理COORDS

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

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

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