XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов> Желтая пресса: обучающие статьи
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

 
DioD

offline
Опыт: 45,134
Активность:
Спецификация формата 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
Toadcop

offline
Опыт: 54,313
Активность:
DioD угу ! прикольно =) хотя это не так уж многим и надо ! если только свой конвертер или что то вроде писать !
Старый 25.07.2006, 17:32
Mefist
Is it cocktail hour yet?
offline
Опыт: 98,190
Активность:
походу только все конверторы с этими форматами уже написаны %)
Старый 25.07.2006, 17:36
DioD

offline
Опыт: 45,134
Активность:
Главное не то что уже всё написано, а то что это появилось на сайте...
Старый 25.07.2006, 21:13
Алексей
Где кошачья мята?!
offline
Опыт: 26,303
Активность:
DioD: ИМХО, для программиста умение читать английские спецификации - признак профпригодности ;). Так что перевод не особенно нужен. Кроме того, есть фирменный кодек от Blizzard, который не требует знания деталей формата - достаточно просто вызвать нужные функции (как это сделано в MdlVis).
Старый 25.07.2006, 22:30
DioD

offline
Опыт: 45,134
Активность:
Тут единственное что можно перевести это часть комментов, и то половина должна быть оставлена неизменно так как коменты являются логическим продолжением кода
Старый 25.07.2006, 22:40
Cronus
Nоsfera†um
offline
Опыт: 6,133
Активность:
а что по созданию прогс тоже моно писать статьи??
молодчик-DioD, я так понял что этот код не имеет граф режима‼?
Старый 26.07.2006, 03:14

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 10:48.