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