![]() |
SDL+Open GL загрузка участка текстуры
Я использую для загрузки текстуры из файла вот такую функцию. Автор не я, поэтому не все с ней ясно(( Главное что хоть работает))
Код:
//Функция загрузки текстур из файла в переменную |
Ответ: SDL+Open GL загрузка участка текстуры
aureli0
можно или уже из OpenGL текстуры кусок скопировать в другую текстуру, или перед загрузкой в OpenGL скопировать кусок памяти в другой кусок памяти, но первое лучше :) |
Re: SDL+Open GL загрузка участка текстуры
эээ, прости я мало понимаю без примера кода((
bool load(string file, GLuint &tex) { ... ... GLuint temp_tex;//временная переменная всей картинки из файла внутри функции glGenTextures(1, &temp_tex); glBindTexture(GL_TEXTURE_2D, temp_tex); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP ); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP ); glTexImage2D(GL_TEXTURE_2D, 0, glFormat, temp->w, temp->h, 0, glFormat, GL_UNSIGNED_BYTE, temp->pixels); SDL_FreeSurface( temp ); glGenTextures(1, &tex);//генерируем кусок текстуры glBindTexture(GL_TEXTURE_2D, tex); ... каким-то магическим образом передаем кусок изображения в эту текстуру ... } только как это изображение туда передать то, понятно что скорее всего через текстурные координаты, но в коде это как должно выглядеть? |
Ответ: SDL+Open GL загрузка участка текстуры
Есть функция glTexSubImage2D. Для нее надо будет вырезать из массива пикселей исходного изображения нужную тебе часть в отдельный массив и передать его в качестве последнего параметра.
Другой вариант, создать одну текстуру, но для разных спрайтов использовать кастомные текстурные координаты. Если есть текстура размером (width, height), а тебе надо натянуть на спрайт фрагмент с координатами диагонали (x1, y1) и (x2, y2), причем x2 > x1 и y2 > y1, то текстурные координаты расчитываются следующим образом: Код:
float s_min = x1 / width; |
Re: SDL+Open GL загрузка участка текстуры
спасибо:) правда я сделал немного по другому, хотя в целом тоже самое:
Код:
//рисуем затекстурированый полигон из общей текстуры |
Часовой пояс GMT +4, время: 15:04. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot