-
tButton © (06.02.08 13:22) [0]продолжаем осваивать OpenGL
наигравшись с BMP текстурами решил написать свой формат хранения текстур
сделал. и даже конвертер к нему сделал
и загрузчики сделал
и в принципе все хорошо, не считая того что OGL отображает скормленую ему текстуру крайне криво
в частности
1) рисует кверху ногами (понятно)
2) рисует зеркально (понятно)
3) рвет часть изображения (непонятно). половина текстуры отрисовывается плавно переходя в преимущественно прозрачный мусор
4) рисует со смещением (есть подозрение, что у меня ошибка в работе с памятью)
private
data: array of byte; // RGBARGBARGBA
width: word;
height: word;
procedure load8888(f: string); // mode = 1
procedure load888(f: string); // mode = 2
procedure load4444(f: string); // mode = 3
procedure load5551(f: string); // mode = 4
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); {Texture blends with object background}
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); { only first two can be used }
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); { all of the above can be used }
gluBuild2DMipmaps(GL_TEXTURE_2D, 4, width, height, GL_RGBA, GL_UNSIGNED_BYTE, pData);
end;
сейчас ищу способ залить скриншот с коммуникатора
как только - сразу отпишусь. ибо со скрином проблема понятнее -
А нафига изобретать велосипед?
Лично я юзаю png, маленький размер, RGBA, все что нужно нормальному человеку.
весьма не плох dds, но там загрузка посложнее. -
tButton © (06.02.08 13:48) [2]у меня линк есть на w3 с описанием формата =)
но сейчас меня интересует конкретный момент работы с OpenGL
пысы
изобретать велосипеды бывает полезно для общего развития =) -
http:\webfile.ru\1728424
Вот мой модуль для работы с BMP, JPG и GIF. Альфаканал ессно отсутствует, и вычисляется уже в процессе перегонки массива байт. Однако можно дописать и поддержку альфы. А лично я щаслиф и так... :) -
tButton © (07.02.08 00:59) [4]
> Dib@zol © (06.02.08 19:39) [3]
именно из-за альфы я за свой формат и взялся
транспарентный битмап при повороте на границе прозрачности выдавал серую кайму
вчера вечером принял допинг и переписал буквально три строчки
изменил формат передаваемых данных с BYTE на FLOAT
и все заработало... ерунда какая-то =( -
use da tga!
-
tButton © (07.02.08 02:12) [6]
> XProger © (07.02.08 01:48) [5]
> use da tga!
gimme da header =) -
tButton © (07.02.08 05:06) [7]Лично я юзаю png, маленький размер, RGBA, все что нужно нормальному человеку.
проверил. текстура 64х64 (рендомные пиксели)
в пнг 24(?) - 12.8кб
в пнг 8 - 7.3кб
в tex 5551 - 8кб (жмется до 4.2)
в tex 4444 - 8кб (жмется до 3.0)
пнг не жмется, т.к. уже сжат. посему - пнг лесом. -
ketmar © (07.02.08 05:15) [8]>[7] tButton © (2008-02-07 05:06:00)
>(рендомные пиксели)
обалдеть. нашёл, что проверять — высокоэнтропийный шум… -
tButton © (07.02.08 05:41) [9]ketmar © (07.02.08 05:15) [8]
>[7] tButton © (2008-02-07 05:06:00)
>(рендомные пиксели)
обалдеть. нашёл, что проверять — высокоэнтропийный шум…
именно то, что хуже всего жмется. имхо - показатель. -
ketmar © (07.02.08 06:35) [10]>[9] tButton © (2008-02-07 05:41:00)
>именно то, что хуже всего жмется. имхо — показатель.
угу. показатель. средней температуры по больнице.
показатель — это когда ты на нескольких гигах своих реальных данных проверяешь. а сей пример — онанирование энтропии, пардон.
---
Understanding is not required. Only obedience. -
tButton © (07.02.08 07:01) [11]*ушел проверять*
-
tButton © (07.02.08 07:24) [12]кадр из фильма (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 -
ketmar © (07.02.08 07:38) [13]проверка некорректная изначально. два последних варианта сохраняют меньше данных, потому и жмутся лучше. это же очевидная вещь. всё равно что сравнивать словарь на 100000 слов и на 10000. понятно, что второй будет и меньше, и легче. то же, что и с jpg — потери.
---
Understanding is not required. Only obedience. -
tButton © (07.02.08 09:50) [14]проверка некорректная изначально.
подскажите в чем
два последних варианта сохраняют меньше данных, потому и жмутся лучше.
предпоследний вариант - часы в ручье. довольно-таки пестрая картинка.
последний - да. но он приведен для сравнения.
практически любая картинка урезаная до 15bpp сжимается до 20-25%
про словари я знаю =)
а качество после потери 9 бит меня вполне устраивает.
ПыСы
между прочим в сабже речь не об этом, а о том что не получается корректно скормить OGLу массив байт -
ketmar © (07.02.08 09:52) [15]>[14] tButton © (2008-02-07 09:50:00)
да пофигу сабж. сравнение-то некорректное. мне и сабж лениво читать — небось там тоже где-то мягкое с квадратным попуано, как в этом случае.
---
Understanding is not required. Only obedience. -
tButton © (07.02.08 10:41) [16]да пофигу сабж. сравнение-то некорректное. мне и сабж лениво читать
а клавиатуру топтать не лениво, как я погляжу. -
ketmar © (07.02.08 10:54) [17]>[16] tButton © (2008-02-07 10:41:00)
не лениво. я так:
а) отдыхаю;
б) тестируб kpmc.
---
Understanding is not required. Only obedience. -
antonn (work) (07.02.08 11:20) [18]а почему бы просто не юзать обычный Tbitmap 32bit, для своего формата просто ужимать его zlib'ом?
а если уж совсем свой, то мне вот удобней было array of dword :) -
tButton © (07.02.08 11:40) [19]antonn (work) (07.02.08 11:20) [18]
zlib'ом не пользовался и не интересовался пока. да и речь сейчас, не о формате хранения данных, а о том как этими данными кормить OGL. не смотря на то, что проблему для себя я уже решил, причина ее возникновения по-прежднему вызывает интерес.