![]() |
|
Модераторы: Rickert, Alexeis, BorisVorontsov |
![]()
|
|
| Nemesis |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 206 Регистрация: 20.2.2005 Где: Москва Репутация: нет Всего: 5 |
Нужна помощь в загрузке изображений с размерами не кратными степени 2. Читал документацию на официальном сайте OpenGL, но там лишь сказано,что есть такая возможность загружать Non-Power-Of-Two Textures, но вот ничего практического по этому поводу не сказано... Какая функция этим занимается... как юзать... Помогите, пожалуйста. Спасибо!
--------------------
|
|||
|
||||
| chipset |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: нет Всего: 165 |
gluBuild2dMipmaps
--------------------
|
|||
|
||||
| Nemesis |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 206 Регистрация: 20.2.2005 Где: Москва Репутация: нет Всего: 5 |
gluBuild2dMipmaps
Да, ее я пробовал, но она почему-то ужасно портит картину. --------------------
|
|||
|
||||
| chipset |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: нет Всего: 165 |
Nemesis, покажи код, плз. У меня вроде всё нормально было..
--------------------
|
|||
|
||||
| Nemesis |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 206 Регистрация: 20.2.2005 Где: Москва Репутация: нет Всего: 5 |
Затрудняюсь его показать, ибо это огромная программа с кучей заголовочных. Дело в том, что gluBuild2dMipmaps все равно доводит до ближайшего размера степени 2ки. Изображение в 640 х 480 доводится этой функцией до 512 х 512.
В результате чего теряются ценные пиксели. --------------------
|
|||
|
||||
| chipset |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: нет Всего: 165 |
Покажи как ты вызываешь gluBuild2dMipmaps ;) Это сообщение отредактировал(а) chipset - 28.3.2005, 05:30 --------------------
|
||||
|
|||||
| Nemesis |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 206 Регистрация: 20.2.2005 Где: Москва Репутация: нет Всего: 5 |
Вот, пожалуйста:
int IMAGE_gl::set_astexture (uint texn,int level) { glBindTexture(GL_TEXTURE_2D,texn); // способ интерполяции в случае, // когда рисунок меньше исходного размера glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,GL_LINEAR); // способ интерполяции в случае, // когда рисунок большего размера glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER,GL_LINEAR); // повторение текстуры в направлении s glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S,GL_REPEAT); // повторение текстуры в направлении t glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T,GL_REPEAT); // выбираем только цвет текстуры glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, (float)GL_REPLACE); // устанавливаем изображение как текстуру gluBuild2DMipmaps(GL_TEXTURE_2D,h->get_bpp()/8, h->get_w(),h->get_h(),h->get_pf(),h->get_pt(),data); #ifdef GL_EXT_paletted_texture // если есть поддержка палитровых текстур #ifdef GL_GLEXT_PROTOTYPES // если функции определены в библиотеке импорта определите этот дефайн if(h->get_bpp()==8) // если текстура с палитрой glColorTableEXT(GL_TEXTURE_2D,h->get_cbpp()/8,h->get_clen(),h->get_cf(), h->get_ct(),pal); // устанавливаем палитру #endif #endif return 1; } А что ее можно вызвать как-то по-другому? --------------------
|
|||
|
||||
| p0s0l |
|
|||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 2 Всего: 112 |
В общем, надо глянуть это: http://oss.sgi.com/projects/ogl-sample/reg...ower_of_two.txt Не знаю, как будет работать gluBuild2DMipmaps, если видяха поддерживает эту фичу, но возможно эта функция всё равно будет приводить к размеру степени двойки, поэтому в таком случае надо будет юзать glTexImage2D... Проще, имхо, перемасштабировать вручную к большему размеру, к 1024x512... -------------------- С уважением, г-н Посол. |
|||
|
||||
| DENNN |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3878 Регистрация: 27.3.2002 Где: Москва Репутация: 2 Всего: 43 |
Я в ссвое время пришел к выводу, что для универсальности решения (т.е. для карт без ARB_texture_non_power_of_two... и пр. условий) нужно "дополнить" в памяти текстуру до степени двойки но сделать это "дополнение" прозрачным.
Решение кривое, но как вариант имеет место быть. |
|||
|
||||
| Nemesis |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 206 Регистрация: 20.2.2005 Где: Москва Репутация: нет Всего: 5 |
Опа, DENNN, а ведь это реально решение
p0s0l, знать бы как ими пользоваться, я как-то с расширениями не работал.А ты случайно не знаешь как ее юзать, мне бы в деталях... --------------------
|
|||
|
||||
| Nemesis |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 206 Регистрация: 20.2.2005 Где: Москва Репутация: нет Всего: 5 |
DENNN, мда, попробовал искусственно до 1024х512 сделать. Но вот картинка очень сильно портится. Оччень, не знаю чего так... эх, а жаль, идея была клевая
--------------------
|
|||
|
||||
![]()
|
| Вы можете найти полезным что... | |
|
|
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Мультимедия, OpenGL/DirectX | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |