DioD
offline
Опыт:
45,184Активность: |
Спецификация формата BLP1 (перевод не знакончен)
Тема для того, что-бы было, перевод будет закончен сёдня, все замечания приветствуются.
Формат BLP1 (как вам должно быть известно есть BLP2 формат текстур ВОВ) Автор Magos(MagosX@GMail.com) Перевод DioD(http://xgm.guru) Типы данных, СИ Формат: CHAR - 8бит Символ BYTE - 8бит Беззнаковое целое число WORD - 16бит Беззнаковое целое число DWORD - 32бит Беззнаковое целое число FLOAT - 32бит Число с плавающей точкой. COLOR - 32бит Цветовое значение формата RGBA, для каждого канала выделен один байт. X[n] - Вектор типа X имеющий n-количество измерений. Описания: [X | Y]; - Одна из структур X и Y точно представлена. X; - Структура которая должна быть представлена. #X - Определяющее значение, больше чем одно значение может быть присвоено. Уточнения - A full mipmap chain must be present. The last mipmap must be 1x1 (no larger). If an image is 32x8 the mipmap chain must be 32x8, 16x4, 8x2, 4x1, 2x1, 1x1. Sizes not of powers of 2 seems to work fine too, the same rules for mipmaps still applies. Ex: 24x17, 12x8 (rounded down), 6x4, 3x2, 1x1 (rounded down). Структура BLP struct Blp { DWORD 'BLP1'; DWORD Compression; //0 - Используе JPEG сжатие //1 - Uses palettes (не сжат) DWORD Flags; //#8 - Uses alpha channel (?) DWORD Width; DWORD Height; DWORD PictureType; //3 - Uncompressed index list + alpha list //4 - Uncompressed index list + alpha list //5 - Uncompressed index list DWORD PictureSubType; //1 - ??? DWORD MipMapOffset[16]; DWORD MipMapSize[16]; [BlpJpeg | BlpUncompressed1 | BlpUncompressed2] }; BLP JPEG Структура (Сжатие == 0) struct BlpJpeg { DWORD JpegHeaderSize; BYTE[JpegHeaderSize] JpegHeader; struct MipMap[16] { BYTE[???] JpegData; }; // Up to 16 mipmaps can be stored in a blp image. 2^16 = 65536, so there's // little risk it won't be enough. Each JPEG (JFIF to be more exact) image // is constructed by merging the header with the mipmap (all mipmaps uses // the same header. It seems like Warcraft 3 can handle JPEG header sizes // of 0 (in case you have trouble generating JPEG images using the same // header) however there are other fan tools that does not. Specifying a // low number like 4 will work too as the only shared data are the initial // JPEG markers. // // Each mipmap has a certain size and is located at a certain offset as // specified in the main blp header. There can be (and sometimes are in // Blizzard's images) unused space between the JPEG header and the JPEG // data. Why this is I don't know! // // The JPEG header of Blizzard's images is usually 624 bytes long. This // may or may not be true for your own generated images depending on how // you generated them. // // The JPEG format is advanced so I won't go into detail here. }; //+----------------------------------------------------------------------------- //| BLP Uncompressed 1 structure (Compression == 1, PictureType == 3 or 4) //+----------------------------------------------------------------------------- struct BlpUncompressed1 { COLOR[256] Palette; struct MipMap[16] { BYTE IndexList[CurrentWidth * CurrentHeight]; BYTE AlphaList[CurrentWidth * CurrentHeight]; }; // CurrentWidth/CurrentHeight is the width/height for the current mipmap. // Mipmap size/offset works the same as explained for JPEGs above. // // Each cell in the index list refers to a location in the palette where // the corresponding RGB value is (the palette is still RGBA, but A is not // used). The alpha list contains the alpha value for the pixel. }; //+----------------------------------------------------------------------------- //| BLP Uncompressed 2 structure (Compression == 1, PictureType == 5) //+----------------------------------------------------------------------------- struct BlpUncompressed2 { COLOR[256] Palette; struct MipMap[16] { BYTE IndexList[CurrentWidth * CurrentHeight]; }; // CurrentWidth/CurrentHeight is the width/height for the current mipmap. // Mipmap size/offset works the same as explained for JPEGs above. // // Each cell in the index list refers to a location in the palette where // the corresponding RGBA value is. The alpha value is inversed so the real // alpha is "255 - alpha". }; Отредактировано DioD, 25.07.2006 в 21:58. |
25.07.2006, 15:00 | #1
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
Toadcop
offline
Опыт:
53,013Активность: |
DioD угу ! прикольно =) хотя это не так уж многим и надо ! если только свой конвертер или что то вроде писать !
|
25.07.2006, 17:32 | #2
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
Mefist
Is it cocktail hour yet?
offline
Опыт:
98,240Активность: |
походу только все конверторы с этими форматами уже написаны %) |
25.07.2006, 17:36 | #3
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
DioD
offline
Опыт:
45,184Активность: |
Главное не то что уже всё написано, а то что это появилось на сайте... |
25.07.2006, 21:13 | #4
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
Алексей
Где кошачья мята?!
offline
Опыт:
26,543Активность: |
DioD: ИМХО, для программиста умение читать английские спецификации - признак профпригодности ;). Так что перевод не особенно нужен. Кроме того, есть фирменный кодек от Blizzard, который не требует знания деталей формата - достаточно просто вызвать нужные функции (как это сделано в MdlVis).
|
25.07.2006, 22:30 | #5
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
DioD
offline
Опыт:
45,184Активность: |
Тут единственное что можно перевести это часть комментов, и то половина должна быть оставлена неизменно так как коменты являются логическим продолжением кода |
25.07.2006, 22:40 | #6
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
Cronus
Nоsfera†um
offline
Опыт:
6,133Активность: |
а что по созданию прогс тоже моно писать статьи??
молодчик-DioD, я так понял что этот код не имеет граф режима‼? |
26.07.2006, 03:14 | #7
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|