Android OpenGL Отображение текстур / Атлас текстур

Всем добрый вечер

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

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

введите описание изображения здесь

Вопрос только в 1-й и 3-й текстурной работе. 2-й нечетный, а 4-й кажется 2-й +3-й текстурой, а 5-й - 2-й,3-й и 4-й вместе взятые

введите описание изображения здесь

Поэтому я построил простую функцию для возврата координат текстуры

    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 ответ

Решение

Если вы хотите использовать значения в этом массиве в качестве координат текстуры, вам нужно будет добавить размер к левой / нижней координате, чтобы получить правую / верхнюю координату. Прямо сейчас вы используете сам размер в качестве правой / верхней координаты. Одним из способов является добавление размера в вызов функции:

float[] textureCoordinateDataMap = createTexture(
     size * xx, size * yy , size (xx + 1), size * (yy + 1));
Другие вопросы по тегам