-
продолжаем осваивать OpenGL наигравшись с BMP текстурами решил написать свой формат хранения текстур сделал. и даже конвертер к нему сделал и загрузчики сделал и в принципе все хорошо, не считая того что OGL отображает скормленую ему текстуру крайне криво в частности 1) рисует кверху ногами (понятно) 2) рисует зеркально (понятно) 3) рвет часть изображения (непонятно). половина текстуры отрисовывается плавно переходя в преимущественно прозрачный мусор 4) рисует со смещением (есть подозрение, что у меня ошибка в работе с памятью)
private
data: array of byte; width: word;
height: word;
procedure load8888(f: string); procedure load888(f: string); procedure load4444(f: string); procedure load5551(f: string); procedure save8888(f: string);
procedure save888(f: string);
procedure save4444(f: string);
procedure save5551(f: string);
public
procedure LoadBitMap(bmp, alpha: string);
procedure LoadTexture(file_name: string; var texture: GLuint);
procedure SaveTexture(file_name: string; mode: byte = 1);
end;
procedure tGTexture.LoadTexture(file_name: string; var texture: GLuint);
var
f: file of byte;
mode: byte;
pData: Pointer;
begin
AssignFile(f, file_name);
Reset(f);
Read(f, mode);
CloseFile(f);
case mode of
1: load8888(file_name);
2: load888(file_name);
3: load4444(file_name);
4: load5551(file_name);
end;
GetMem(pData, length(data));
move(data, pData^, length(data));
glGenTextures(1, Texture);
glBindTexture(GL_TEXTURE_2D, Texture);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
gluBuild2DMipmaps(GL_TEXTURE_2D, 4, width, height, GL_RGBA, GL_UNSIGNED_BYTE, pData);
end;
сейчас ищу способ залить скриншот с коммуникатора как только - сразу отпишусь. ибо со скрином проблема понятнее
-
А нафига изобретать велосипед? Лично я юзаю png, маленький размер, RGBA, все что нужно нормальному человеку. весьма не плох dds, но там загрузка посложнее.
-
у меня линк есть на w3 с описанием формата =) но сейчас меня интересует конкретный момент работы с OpenGL
пысы изобретать велосипеды бывает полезно для общего развития =)
-
http:\webfile.ru\1728424
Вот мой модуль для работы с BMP, JPG и GIF. Альфаканал ессно отсутствует, и вычисляется уже в процессе перегонки массива байт. Однако можно дописать и поддержку альфы. А лично я щаслиф и так... :)
-
> Dib@zol © (06.02.08 19:39) [3]
именно из-за альфы я за свой формат и взялся транспарентный битмап при повороте на границе прозрачности выдавал серую кайму
вчера вечером принял допинг и переписал буквально три строчки изменил формат передаваемых данных с BYTE на FLOAT и все заработало... ерунда какая-то =(
-
use da tga!
-
> XProger © (07.02.08 01:48) [5] > use da tga!
gimme da header =)
-
Лично я юзаю png, маленький размер, RGBA, все что нужно нормальному человеку. проверил. текстура 64х64 (рендомные пиксели) в пнг 24(?) - 12.8кб в пнг 8 - 7.3кб в tex 5551 - 8кб (жмется до 4.2) в tex 4444 - 8кб (жмется до 3.0) пнг не жмется, т.к. уже сжат. посему - пнг лесом.
-
>[7] tButton © (2008-02-07 05:06:00) >(рендомные пиксели) обалдеть. нашёл, что проверять — высокоэнтропийный шум…
-
ketmar © (07.02.08 05:15) [8] >[7] tButton © (2008-02-07 05:06:00) >(рендомные пиксели) обалдеть. нашёл, что проверять — высокоэнтропийный шум…
именно то, что хуже всего жмется. имхо - показатель.
-
>[9] tButton © (2008-02-07 05:41:00) >именно то, что хуже всего жмется. имхо — показатель. угу. показатель. средней температуры по больнице.
показатель — это когда ты на нескольких гигах своих реальных данных проверяешь. а сей пример — онанирование энтропии, пардон.
--- Understanding is not required. Only obedience.
-
*ушел проверять*
-
кадр из фильма (512х384) bmp - 576k png24 - 163.2k 5551+zip - 87.6k 4444+zip - 55.3k
обоя на рабочий стол(1120х770) bmp - 2.4M png24 - 0.9M 5551+zip - 399.4k 4444+zip - 246.1k
скриншот скринсейвера the Lost Watch (1024х768) bmp - 2.2M png24 - 1.1M 5551+zip - 753.0k 4444+zip - 485.5k
charmap азбуки катакана (128х128) bmp - 48k png24 - 6.6k 5551+zip - 2.8k 4444+zip - 2.2k
-
проверка некорректная изначально. два последних варианта сохраняют меньше данных, потому и жмутся лучше. это же очевидная вещь. всё равно что сравнивать словарь на 100000 слов и на 10000. понятно, что второй будет и меньше, и легче. то же, что и с jpg — потери.
--- Understanding is not required. Only obedience.
-
проверка некорректная изначально. подскажите в чем два последних варианта сохраняют меньше данных, потому и жмутся лучше. предпоследний вариант - часы в ручье. довольно-таки пестрая картинка. последний - да. но он приведен для сравнения. практически любая картинка урезаная до 15bpp сжимается до 20-25% про словари я знаю =) а качество после потери 9 бит меня вполне устраивает.
ПыСы между прочим в сабже речь не об этом, а о том что не получается корректно скормить OGLу массив байт
-
>[14] tButton © (2008-02-07 09:50:00) да пофигу сабж. сравнение-то некорректное. мне и сабж лениво читать — небось там тоже где-то мягкое с квадратным попуано, как в этом случае.
--- Understanding is not required. Only obedience.
-
да пофигу сабж. сравнение-то некорректное. мне и сабж лениво читать а клавиатуру топтать не лениво, как я погляжу.
-
>[16] tButton © (2008-02-07 10:41:00) не лениво. я так: а) отдыхаю; б) тестируб kpmc.
--- Understanding is not required. Only obedience.
-
а почему бы просто не юзать обычный Tbitmap 32bit, для своего формата просто ужимать его zlib'ом? а если уж совсем свой, то мне вот удобней было array of dword :)
-
antonn (work) (07.02.08 11:20) [18] zlib'ом не пользовался и не интересовался пока. да и речь сейчас, не о формате хранения данных, а о том как этими данными кормить OGL. не смотря на то, что проблему для себя я уже решил, причина ее возникновения по-прежднему вызывает интерес.
-
Если потери качества устраивают - см. DDS, точнее, DXT1-5. Там по сравнению с 32-битным bmp всё сжимается в 4 раза (24-битный - в 6 раз), и результат ещё можно сжать архиватором.
-
tbitmap по сути тот же массив dword, только его можно просмотреть в любом редакторе :) к тому же должен же быть метод конвертирования bmp в формат текстур ogl.
|