HLFX.Ru Forum
Показать все 14 сообщений этой темы на одной странице

HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- OpenGL (https://hlfx.ru/forum/forumdisplay.php?forumid=7)
-- Степень двойки, gluScaleImage и пр. (https://hlfx.ru/forum/showthread.php?threadid=1702)


Отправлено Jumpdaphuckup! 24-01-2009 в 23:03:

Степень двойки, gluScaleImage и пр.

Значит так.
Есть изображение: BMP, 24bpp, 122x169.
Задача: использовать его в качестве текстуры OpenGL, чего ж еще.

Изображение читается правильно (проверено).
Так как красная книга обещала автоматический рескейл "неправильных текстур" в gluBuild2DMipmaps, использовал именно эту функцию. Эффект показан в аттаче.
Затем пробую такое:

C++ Source Code:
gluScaleImage(GL_RGB, m_iOriginalWidth, m_iOriginalHeight, GL_UNSIGNED_BYTE, texture->data, iNewWidth, iNewHeight, GL_UNSIGNED_BYTE, pResized);
Думаю, по именам понятно где что. iNewWidth и iNewHeight - ближайшие наименьшие степени 2. Рассчитаны правильно (проверено).
Результат аналогичный.
Что самое ужасное - не понятно какие именно размеры вызывают эти искажения. Некоторые изображения с размерами отличными от степеней 2 нормально отображаются.

Есть идеи?

__________________
avtobus zekov


Отправлено Дядя Миша 24-01-2009 в 23:43:

Jumpdaphuckup! типичная трабла bmp.
Перепакуй в TGA и все пройдет.
ЗЫ. я не разбирался в чем там конкретно дело, но по-моему один бит сбивается в самом начале.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено Jumpdaphuckup! 25-01-2009 в 00:47:

Нет, формат здесь не при чем - все получается аналогично и для jpg и для tga. К тому же на входе у меня нормальный массив данных. Я его проверял рисованием по точкам через винапи.

Кто-нибудь пробовал давать gluBuild2DMipmaps "неправильную текстуру"?

__________________
avtobus zekov


Отправлено Дядя Миша 25-01-2009 в 01:10:

я не юзаю glu - у меня свой скалер и таких проблем нету.
А мож ты в размерах на один пиксель ошибся?

Добавлено 25-01-2009 в 04:10:

>>gluScaleImage(GL_RGB
а точно картинка GL_RGB ? не GL_INDEXED_COLOR или GL_RGBA ?

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено Jumpdaphuckup! 25-01-2009 в 01:27:

Все точно. Доказательство этому - нормальная заргузка текстур 128х128 64х256 и т.п.

Добавлено 25-01-2009 в 03:27:

Такое чувство, что где-то высота с шириной попутаны...

__________________
avtobus zekov


Отправлено XaeroX 25-01-2009 в 01:49:

Цитата:
Jumpdaphuckup! писал:
Думаю, по именам понятно где что. iNewWidth и iNewHeight - ближайшие наименьшие степени 2. Рассчитаны правильно (проверено).

Судя по тому, что в аттаче - квадрат, рассчитаны они неправильно. Должен быть прямоугольник 128x256.

__________________

xaerox on Vivino


Отправлено Jumpdaphuckup! 25-01-2009 в 10:38:

Елки-палки, да это ж наложенная на квадрат текстура. А прямоугольник должен быть не 128x256, а 64х128

Цитата:
Jumpdaphuckup! писал:
ближайшие наименьшие степени 2


Добавлено 25-01-2009 в 12:38:

Кстати, текстуры 64х256 и 256х64 тоже не вызывают никаких проблем.

__________________
avtobus zekov


Отправлено XaeroX 25-01-2009 в 10:46:

Ну обычно делают наибольшие, чтобы потерь не было.

__________________

xaerox on Vivino


Отправлено Jumpdaphuckup! 25-01-2009 в 10:53:

Видать, придется свой рескейл писать...

__________________
avtobus zekov


Отправлено Дядя Миша 25-01-2009 в 11:27:

Jumpdaphuckup! вот с этого и надо было начинать

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено XaeroX 25-01-2009 в 11:29:

У меня еще есть подозрение (судя по скрину), что у тебя нифига не рискейлилось. То есть ты загрузил старую картинку с новыми значениями ширины и высоты. Ты именно pResized загружаешь в текстуру? Он достаточного размера маллокнут?

__________________

xaerox on Vivino


Отправлено Jumpdaphuckup! 25-01-2009 в 12:14:

XaeroX да, похоже на правду Но там дело не в этом. У меня изначально было три загрузчика: bmp, jpg и tga. Все они создавали массив точек, который успешно рисовался через винапи. Но при создании огл-текстуры из этого массива (если там не степени 2) получается хрень.

Если вообще убрать нафиг весь мой код и загружать текстуру так:

code:
AUX_RGBImageRec* texture = auxDIBImageLoad( strPath ); glGenTextures( 1, pIndex ); glBindTexture( GL_TEXTURE_2D, *pIndex ); gluBuild2DMipmaps(GL_TEXTURE_2D, 3, texture->sizeX, texture->sizeY, GL_RGB, GL_UNSIGNED_BYTE, texture->data);

Получается то же самое.

__________________
avtobus zekov


Отправлено XaeroX 25-01-2009 в 12:28:

покрути glPixelStorei.
GL_UNPACK_ALIGNMENT, к примеру.

__________________

xaerox on Vivino


Отправлено Jumpdaphuckup! 25-01-2009 в 13:42:

Да я уже свой рескейл написал. Он даже быстрее чем глу-шный. Правда, качество хуже. Но для редактора важнее скорость загрузки текстуры.

Цитата:
XaeroX писал:
GL_UNPACK_ALIGNMENT
Ага, я, помню, глядел косо на это слово, но не разбирался.

__________________
avtobus zekov


Временная зона GMT. Текущее время 14:04.
Показать все 14 сообщений этой темы на одной странице

На основе vBulletin версии 2.3.0
Авторское право © Jelsoft Enterprises Limited 2000 - 2002.
Дизайн и программирование: Crystice Softworks © 2005 - 2024