Модераторы: Rickert, Alexeis, BorisVorontsov

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Хранение файлов в собственном формате, Создание собственного формата для хранен 
:(
    Опции темы
ZC1989
  Дата 18.7.2006, 18:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 468
Регистрация: 17.7.2006
Где: Нижний Новгород; Россия

Репутация: нет
Всего: 1



Доброго Всем Времени Суток! smile 

я не так давно начал юзать дирекст.. на С++ могу (не без матершины) писать... но в основном это примитив... щас вот взял двух пацанов и мы начали делать игруху, как наверное стало понятно, я единственный программирующий из Нас. 

написал "вход" в игру... развернул сцену и отображением того же примитива, но возник своевременный вопросец - как создать собственную систему архивации и хранения изображений, со сжатием и минимальными потерями качества.
мне нравится эта раелизация в ГТА, в своё время я там весь движок перелопатил и единственное хорошее там именно хранение файлов, на мой взгляд...

Пожалуйста, подскажите, как сверстать что-то подобное?! просто я подошёл к моменту введения текстур и мне не хотелось бы тоскать за собой огромный шлейф БМПшек... smile  


--------------------
озарение настанет позже, когда поймём больше... (Сo. Stigmata)
PM MAIL ICQ   Вверх
MoZy
Дата 20.7.2006, 19:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 193
Регистрация: 4.6.2006

Репутация: нет
Всего: 0



Ну если хочешь сжимать вообще без потерь, то поищи в инете исходники GZIP'а. Пишешь свой запаковщик/распаковщик типа IMG Tool.
Вобщем так:

Открываешь бмпешку в буфер, сжимаешь GZIP'ом  и пишешь в свой файл следущее:

simple.bmp//имя файла
153000     //размер в байтах (сколько читать)
.............    //и тут все 153000 байт сжатого бмп

logo.bmp //имя другого файла
20500
.........

и так по мере надобности добавляешь или перезаписываешь.

потом, когда понадобится прочитать, то поступаешь так:

допустим ты знаешь бмпешку по имени, тогда ты читаешь первую строчку своего файла, если не совпадает, читаешь сколько байт и seek'ом их пропускаешь, затем все повторяется, пока не наткнешься на EOF или свой файл. 
Если тебе повезло, то читаешь его в буфер и декодируешь. Вот, у тебя готовый Bitmap.

Можно еще, при создании твоего архива, делать лог-файл, в котором указывается позиция какого-то файла (ну и число байт), тогда в самом архиве можно хранить все сплошняком. И поиск тогда не нужен: сразу seek и в буфер. 
--------------------
Experimentia est optima rerum magistra
PM MAIL WWW ICQ   Вверх
Rickert
Дата 22.7.2006, 09:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: 2
Всего: 52



ZC1989
Текстуры берут без потерь. В большенстве своём аля TGA. А потом всё сжимают архивируя. Таким образом пространства занимается мало и потреь качества нет. 


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
ZC1989
Дата 5.8.2006, 16:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 468
Регистрация: 17.7.2006
Где: Нижний Новгород; Россия

Репутация: нет
Всего: 1



блин... забыл я про эту тему....


MoZy, спасибо за мысли, я думаю как раз сделать что-то типа IMG Tool'а, но не БМПшки там хранить а TGA'шки... они мне в дальнейшем как ра- понадобятся... там несколько фич с ними есть... вот только может кто-нибудь разъяснить следующее, когда я загружаю текстуру (ТГА или ДЖПЕГ, не важно) окак мне её использовать в обычном приложеении? я замучался уже... куча примеров, и везде без литра не разобраться... вопрос следующий, как эта текстура будет отпереляться? ей должно задаваться индивидуально имя или что? как она используется?

ЗЫ: мне надо воткнуть её так же как это с битмаппами получается... smile  знаю, вопрос люзерский, но какой есть...


--------------------
озарение настанет позже, когда поймём больше... (Сo. Stigmata)
PM MAIL ICQ   Вверх
Pilligrim
Дата 12.8.2006, 18:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 65
Регистрация: 9.6.2006

Репутация: нет
Всего: 1



ZC1989, я тоже в DirectX новичок. Начал писать графический 3D-движок. Но от использования 3Ds файлов отказался. Ты пробовал их читать? Нормально всё?

Цитата
написал "вход" в игру... развернул сцену и отображением того же примитива


Лучше отобрази не примитив, а готовый объект(а лучше целую сцену), а то вдруг 3Ds-формат подкачает, а ты уже научишься тектуры накладывать. Вот.
PM MAIL   Вверх
Pilligrim
Дата 12.8.2006, 19:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 65
Регистрация: 9.6.2006

Репутация: нет
Всего: 1



Кстати:
Цитата
ЗЫ: мне надо воткнуть её так же как это с битмаппами получается...   знаю, вопрос люзерский, но какой есть...


Я думаю, что тебе придется писать свою функцию наложения текстур из тга-файлов.
PM MAIL   Вверх
ZC1989
Дата 12.8.2006, 20:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 468
Регистрация: 17.7.2006
Где: Нижний Новгород; Россия

Репутация: нет
Всего: 1



Pilligrim, я стал сразу же использовать Х-файлы... они дирекстом понимаются очень просто... а вот относительно загрузки "чужеродных форматов" для графики, так я использовал уже готовые, но пока не занимаюсь отрисовкой сцены... есть всякие мелочи, пока что важнее...

Это сообщение отредактировал(а) ZC1989 - 12.8.2006, 20:15


--------------------
озарение настанет позже, когда поймём больше... (Сo. Stigmata)
PM MAIL ICQ   Вверх
Pilligrim
Дата 12.8.2006, 20:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 65
Регистрация: 9.6.2006

Репутация: нет
Всего: 1



Цитата
есть всякие мелочи, пока что важнее...


Ты меня, конечно, извини, но, если не секрет, какие мелочи? Что может быть важнее графического движка? Т.е. я считаю, что его нужно писать первым. Т.к. всю логику игры удобнее описывать, когда видишь как это будет выглядеть(а не с помощью раппортов типа: удар, урон 150, блок, здоровье 45 и т.д.) Ведь так?

Цитата
я использовал уже готовые, но пока не занимаюсь отрисовкой сцены...


Значит ты пробовал что-нить нарисовать(например в максе), потом сохранить в *.3Ds, а потом прочитать с помощью проги и прорисовать? Или всё-таки нет? Я то про то, что у тебя это может не получиться(поэтому попробуй, заклинаю тебя  smile ). Я писал свой читатель 3Ds-файлов. У меня прочитать не получилось... Он текстуры не читает, цвет тоже... Только каркас, и то с напрягом! smile 
PM MAIL   Вверх
ZC1989
Дата 12.8.2006, 20:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 468
Регистрация: 17.7.2006
Где: Нижний Новгород; Россия

Репутация: нет
Всего: 1



Pilligrim, Парнишь, когда ставишь SDK по дирексту на винду и МАКС у тебя уже установлен, там появится возможность экспорта в формат X-File's для его прочтение существует примитивная функция... если надо, я суну её сюда, ток сначала приведу в благочестивый вид... и к тому же этот формат поддерживает текстуры


--------------------
озарение настанет позже, когда поймём больше... (Сo. Stigmata)
PM MAIL ICQ   Вверх
Pilligrim
  Дата 12.8.2006, 20:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 65
Регистрация: 9.6.2006

Репутация: нет
Всего: 1



Дык я не про X-File's, а про 3Ds! Их читать пробовал в своей проге?  
PM MAIL   Вверх
ZC1989
Дата 12.8.2006, 20:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 468
Регистрация: 17.7.2006
Где: Нижний Новгород; Россия

Репутация: нет
Всего: 1



Pilligrim, нет, я не пробовал... говорю же что пока меня устраивает Х... может потом и придётся перейти на что-то сильное, но в таком случае буду писать ваще свой формат... smile 

а чё тебе так уср*лся этот 3Ds?!

кстати, ты знаешь, как толком загрузить ТГАшку и на форму, вместо битмапа сунуть... ну надоело уже... загружаю в переменку, а вот воткнуть на форму никак  smile 


--------------------
озарение настанет позже, когда поймём больше... (Сo. Stigmata)
PM MAIL ICQ   Вверх
Pilligrim
Дата 13.8.2006, 18:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 65
Регистрация: 9.6.2006

Репутация: нет
Всего: 1



Цитата
Pilligrim, нет, я не пробовал... говорю же что пока меня устраивает Х... может потом и придётся перейти на что-то сильное, но в таком случае буду писать ваще свой формат...


Ну, для этого тебе надо:
1) суметь прочитать один из "сильных" форматов
2) как-то представить всё что туда напихали его девелоперы в своей проге
3) создать структуру(причем удобнее) своего формата
4) загнать туда то, что ты прочитал из одного из "сильных" форматов
Вооооот...

Цитата
а чё тебе так уср*лся этот 3Ds?!


Потому в него не загоняют текстуры, цвет и анимацию((( Лучше переходи на ASE файлы, как я))

Цитата
кстати, ты знаешь, как толком загрузить ТГАшку и на форму, вместо битмапа сунуть... ну надоело уже... загружаю в переменку, а вот воткнуть на форму никак


А в какую переменку загружаешь?
PM MAIL   Вверх
ZC1989
  Дата 13.8.2006, 23:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 468
Регистрация: 17.7.2006
Где: Нижний Новгород; Россия

Репутация: нет
Всего: 1



Pilligrim, я нашёл достойный (как мне кажется) алгоритм загрузги этой самой ТГАшки... резутьтат возвращается в переменную CImage, это собственный для хранения...

Код

class CImage
{
  public:
    CImage();
    ~CImage();

  typedef struct { unsigned char r, g, b; } _RGB;
  typedef struct { unsigned char b, g, r; } _BGR;
  typedef struct { unsigned char b, g, r, a; } _BGRA;

  struct _BMPFILEHEADER
  {
    unsigned short bfType;
    long int       bfSize, bfRes1, bfOffBits; 
  };

  struct _BMPIMAGEHEADER
  {
    long int       biSize, biWidth, biHeight;
    unsigned short biPlanes, biBitCount;
    long int       biCompression, biSizeImage;
    long int       biXPelsPerMeter, biYPelsPerMeter;
    long int       biClrUsed, biClrImportant; 
  };

  struct _TGAHEADER
  {
    unsigned char  tiIdentSize;
    unsigned char  tiPaletteIncluded;
    unsigned char  tiImageType;
    unsigned short tiPaletteStart;
    unsigned short tiPaletteSize;
    unsigned char  tiPaletteBpp;
    unsigned short tiX0;
    unsigned short tiY0;
    unsigned short tiXres;
    unsigned short tiYres;
    unsigned char  tiBitPerPixel;
    unsigned char  tiAttrBits;
  };

  public:
    int  Init( int Xres, int Yres, unsigned short BitPerPixel );
    int  ConvertTo32( void );
    int  SaveBmp(char *szFilename);
    int  LoadBmp(char *szFilename);
    int  SaveTga(char *szFilename, bool bCompressed );
    int  LoadTga(char *szFilename);

  private:
    void Output( char * pcData, int nSize );
    void Output( char c );
    void Output( void );
    unsigned char Input( void );

  public:
    int              m_Xres, m_Yres;
    unsigned short   m_BitPerPixel;
    unsigned char  * m_pBitmap;
    _RGB             m_Pal[256];

  private:
    int              m_NumPixel;
    FILE             * f;
    int              m_nCount;
    char             m_cBuf[32768];
};


вот это... я картинку загружаю в переменку... всё тип-топ... а вот как её присвотить форме?!  мне этот понадобится для вывода на простом диалоге и для загрузки текстур в самом движке... воть...

есть соображения? smile 


--------------------
озарение настанет позже, когда поймём больше... (Сo. Stigmata)
PM MAIL ICQ   Вверх
Pilligrim
Дата 14.8.2006, 18:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 65
Регистрация: 9.6.2006

Репутация: нет
Всего: 1



По мне дык лучше засунуть все в структурку BITMAP. Все предельно просто.
Вот описание:
The BITMAP structure defines the type, width, height, color format, and bit values of a bitmap. 

typedef struct tagBITMAP {  // bm  
   LONG   bmType; 
   LONG   bmWidth; 
   LONG   bmHeight; 
   LONG   bmWidthBytes; 
   WORD   bmPlanes; 
   WORD   bmBitsPixel; 
   LPVOID bmBits; 
} BITMAP; 
 

Members

bmType

Specifies the bitmap type. This member must be zero. 

bmWidth

Specifies the width, in pixels, of the bitmap. The width must be greater than zero. 

bmHeight

Specifies the height, in pixels, of the bitmap. The height must be greater than zero. 

bmWidthBytes

Specifies the number of bytes in each scan line. This value must be divisible by 2, because Windows assumes that the bit values of a bitmap form an array that is word aligned. 

bmPlanes

Specifies the count of color planes. 

bmBitsPixel

Specifies the number of bits required to indicate the color of a pixel. 

bmBits

Points to the location of the bit values for the bitmap. The bmBits member must be a long pointer to an array of character (1-byte) values. 

 

Remarks

The bitmap formats currently used are monochrome and color. The monochrome bitmap uses a one-bit, one-plane format. Each scan is a multiple of 32 bits. 
Scans are organized as follows for a monochrome bitmap of height n: 

    Scan 0  
    Scan 1 
    . 
    . 
    . 
    Scan n-2 
    Scan n-1 
 

The pixels on a monochrome device are either black or white. If the corresponding bit in the bitmap is 1, the pixel is set to the foreground color; if the corresponding bit in the bitmap is zero, the pixel is set to the background color. 
Только на английском))) Переводить не захотелось. Будут вопросы спрашивай)))
PM MAIL   Вверх
ZC1989
Дата 14.8.2006, 19:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 468
Регистрация: 17.7.2006
Где: Нижний Новгород; Россия

Репутация: нет
Всего: 1



Pilligrim,  вопрос есть, до меня вот просто не доперает, как мне в битмапповую структуру прочитать скажем ТГА?! ведь разве сам БИТМАП понимает этот формат?! помоему нет.. покрайне мере не работало у меня это... smile 


--------------------
озарение настанет позже, когда поймём больше... (Сo. Stigmata)
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Вы можете найти полезным что...
Alexeis
Rickert
  • Английская документация по DirectX лежит где-то здесь.
  • Английская документация по OpenGL лежит где-то там.
  • Гейм-дев у нас обсуждают где-то тут

Ждём вас! С уважением, Alexeis, Rickert.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Мультимедия, OpenGL/DirectX | Следующая тема »


 




[ Время генерации скрипта: 0.0559 ]   [ Использовано запросов: 23 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.