0

Добрый вечер всеAndroid OpenGL Texture Mapping/Texture Atlas

Я пытаюсь получить мою программу OpenGL использовать 1 текстуры (текстуры Атлас). Это 256 х 256. Я загружаю его как обычную текстуру.

Если текстура от 0,0 до 1,1, то я считаю, что каждый квадрат имеет размер 0,2.

enter image description here

Речь идет только первая и третья структура работы. Второй нечетно и четвёртую, кажется, второй + третий текстуры и пятый является второй, третий и четвёртый вместе взятые

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));