1) Я думаю, что ключевое слово, которое вы ищете, - это «Атлас текстуры».
Некоторые подсказки, но вы можете найти лучшие объяснения в Интернете, так как я все еще учусь: (Я использую OpenGl 2.1 и GLSL1.2 так ymmv)
Вершинный шейдер имеет что-то вроде этого:
uniform mat4 projectionMatrix;
uniform mat4 viewMatrix;
uniform mat4 modelMatrix;
attribute vec3 position;
attribute vec2 texcoord;
varying vec2 vertTexCoord;
void main()
{
vertTexCoord = texcoord;
gl_Position = projectionMatrix * viewMatrix * modelMatrix * vec4(position, 1.0f);
}
в вашем фрагментном шейдере вы делаете что-то вроде этого:
uniform sampler2D texture;
varying vec2 vertTexCoord;
void main()
{
gl_FragColor = texture2D(texture, vertTexCoord);
}
, а затем, например, есливам нужна сетка квадратов 2х2 (текстура разделена на 4 части), у вас будут такие вершины;(при условии, что квадраты имеют ширину 1 единицу и высоту)
(uv = texcoord, vertex = position)
square1
и следующий квадрат справа от выглядит следующим образом:
square2
Важно помнить, что, хотя координаты вершины могут превышать 1 и ниже 0, координаты текстуры не могут (всегда между 0 и 1).
2) Я бы не стал делить растровое изображение, поскольку использование текстурных атласов (во множественном числе?) Уже довольно быстро, и я сомневаюсь, что вы получите значительное увеличение скорости (если оно вообще есть).
Я надеюсь, что смогу помочь!(также извините, но я не могу встраивать изображения напрямую, пожалуйста, дайте мне ответ. Чтобы я мог сделать это в будущем! :))