Показать сообщение отдельно
Старый 09.09.2009, 23:31   #4
alcoSHoLiK
Дэвелопер
 
Регистрация: 17.01.2006
Сообщений: 1,512
Написано 78 полезных сообщений
(для 110 пользователей)
Ответ: SDL+Open GL загрузка участка текстуры

Есть функция glTexSubImage2D. Для нее надо будет вырезать из массива пикселей исходного изображения нужную тебе часть в отдельный массив и передать его в качестве последнего параметра.

Другой вариант, создать одну текстуру, но для разных спрайтов использовать кастомные текстурные координаты.
Если есть текстура размером (width, height), а тебе надо натянуть на спрайт фрагмент с координатами диагонали (x1, y1) и (x2, y2), причем x2 > x1 и y2 > y1, то текстурные координаты расчитываются следующим образом:
float s_min = x1 / width;
float s_max = x2 / width;
float t_min = y1 / height;
float t_max = y2 / height;

tex_coords[0] = s_min; tex_coords[1] = t_max;
tex_coords[2] = s_min; tex_coords[3] = t_min;
tex_coords[4] = s_max; tex_coords[5] = t_max;
tex_coords[6] = s_max; tex_coords[7] = t_min;

// ...

glBindTexture(GL_TEXTURE_2D, ...);

glVertexPointer(...);
glTexCoordPointer(2, GL_FLOAT, 0, tex_coords);

glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
Порядок следования s_min, s_max, t_min и t_max может быть другим, в зависимости от того, как ты задаешь координаты вершин. А их вычисление от этого порядка не зависит.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
aureli0 (14.09.2009)