PMG

Форумы по созданию игр
Текущее время: 12 дек 2024 14:56

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 37 ]  На страницу 1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения: Как написать загрузчик BMP файлов
СообщениеДобавлено: 07 июн 2006 13:32 
Как написать загрузчик растровых файлов BMP,TGA,PCX,JPG файлов на C++ при использовании DirectDraw желательно на компиляторе Visual C++ 6.0.

P.S. Готовые загрузчики не предлогать, потому что если хочешь научится
писать игры пиши всё сам.


Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: 07 июн 2006 15:58 
Не в сети
Гуру
Аватара пользователя

Зарегистрирован: 03 авг 2004 10:37
Сообщения: 2694
BMP,TGA,PCX - написать нет проблем. Берешь доку по формату и пишешь, а JPG написать самому не реально. Только если либу юзать по нему от The Independent JPEG Group's JPEG software. Никто по моему без нее не обошелся. По мне так DevIL настолько хорош в этом плане, что нафиг надо самому, что писать... Тем более к игре это ни какого отношения не имеет. Кроме этого, почему ты про PNG забыл?

_________________
С уважением, Сергей


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Как написать загрузчик BMP файлов
СообщениеДобавлено: 07 июн 2006 18:16 
Если для тебя это непроблема.Может подскажешь где взять доку по формату, а самое главное как написать простенький загрузчик bmp файлов на C++. Желательно по подробнее описать этап написания загрузчика.
Я ещё новичок в написании игр и для меня написать загрузчик это проблема.

Что значит к игре отношение не имеет? Допустим я захочу создать простенький космический симулятор. На рисую космический корабль
и сохраню его на жёстком диске в формате BMP, а затем захочу загрузить
его с диска на первичную поверхность DirectDraw, но для этого надо сначала написать загрузчик файлов в формате BMP.К сожелению я незнаю как его написать.


Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: 08 июн 2006 00:36 
Не в сети
Любитель
Аватара пользователя

Зарегистрирован: 07 июн 2006 00:37
Сообщения: 27
Откуда: cemetery
вообще, в пакете directx sdk, есть примеры на c++
там вроде есть и загрузчики,
причём используються часто...

сам я делаю вот так (на Delphi, наверно сможешь на c++ переделать???):

lpSurf: IDirectDrawSurface7; //загружаться картинка будет на неё
hImage: HBITMAP; { хэндл картинки, его можно получить так:
hImage:=LoadImage(0,file_name,IMAGE_BITMAP,0,0,LR_LOADFROMFILE or LR_CREATEDIBSECTION);}
.....
var destDC,
srcDC: HDC;
bm: TBITMAP; //из Windows.pas, который в uses пишется
hObj: HGDIOBJ;
....
srcDC:=CreateCompatibleDC(0);
if srcDC=0 then Exit;
hObj:=SelectObject(srcDC,hImage);
if (hObj=0) or (hObj=GDI_ERROR) then Exit;
if GetObject(hImage,SizeOf(bm),@bm)=0 then Exit;
if not CreateSurface(lpSurf,bm.bmWidth,bm.bmHeight) then Exit;
if SUCCEEDED( lpSurf.GetDC( destDC ) ) then
begin
BitBlt(destDC,0,0,bm.bmWidth,bm.bmHeight,srcDC,0,0,SRCCOPY);
lpSurf.ReleaseDC(destDC);
end else Exit;
DeleteObject(hObj);
DeleteDC(srcDC);

_________________
people = shit


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как написать загрузчик BMP файлов
СообщениеДобавлено: 08 июн 2006 08:40 
Не в сети
Гуру
Аватара пользователя

Зарегистрирован: 03 авг 2004 10:37
Сообщения: 2694
Voland писал(а):
Если для тебя это непроблема.Может подскажешь где взять доку по формату,


http://www.wotsit.org.

Voland писал(а):
а самое главное как написать простенький загрузчик bmp файлов на C++. Желательно по подробнее описать этап написания загрузчика.
Я ещё новичок в написании игр и для меня написать загрузчик это проблема.


Ты не читал книгу Стен Трухильо "Быстродействующая графика для Windows средствами DirectDraw"? Она есть на сайте. Там как раз про это есть.

Voland писал(а):
Что значит к игре отношение не имеет? Допустим я захочу создать простенький космический симулятор. На рисую космический корабль
и сохраню его на жёстком диске в формате BMP, а затем захочу загрузить
его с диска на первичную поверхность DirectDraw, но для этого надо сначала написать загрузчик файлов в формате BMP.К сожелению я незнаю как его написать.


Но если есть готовые либы, то зачем писать свои!

Кстати, в DX есть загрузчики разнообразных форматов файлов. DirectShow там вообще можно фильмы проигрывать.

Так же можно использовать IPicture из WinAPI, смотри 41 урок NeHe.

_________________
С уважением, Сергей


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 08 июн 2006 08:41 
Не в сети
Гуру
Аватара пользователя

Зарегистрирован: 03 авг 2004 10:37
Сообщения: 2694
Если тебе хочется написать свое - возьми за основу DevIL и посмотри как там все сделано ...

_________________
С уважением, Сергей


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 08 июн 2006 11:37 
Уважаемый Margenal в пакети DirectX 9.0 SDK нету примеров под DirectDraw. В DirectX 8.1 SDK есть примеры под DirectDraw, но BMP файлы которые там используются не грузятся с диска , а подключаются как ресурсы к EXE файлу.Это не есть хорошо потому что увеличивает размер исполняемого файла.Других SDK у меня нет, если у тебя есть примеры DirectDraw где используются загрузчики скинь сылку или пошли
мне на мыло.


Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: 08 июн 2006 13:19 
Уважаемый Гуру MagicWolf ваш господин Трухильо которого вы так хорошо рекламируите на сайте использует DirectDraw с MFC APP Wizard,
а я использую Win32 API без MFC.Можно ли его переделать под Win32 API?

Единственая книга которую я читал Программирование игр для Windows советы профессионала ,афтар Андре Ламот.

Если бы я ещё знал как использовать эти самые либы.Единственая книга по DirectX которая уменя, есть это Программирование игр для Windows.
Автор в ней пишет, что загрузить bmp файл можно двумя способами: воспользоваться функцией Win32 API или самому написать загрузчик файлов.Поскольку постичь принцеп действия функции Win32 API обычно так же сложно,как и написать свои собственный.Поэтому автор не пишет как написать собственный загрузчик, мотивируя это тем что это очень сложно, и поэтому даёт уже готовый загрузчик.

Я пытался разобрать код этого загрузчика , но так и не смог понять как переделать его чтобы он мог загружать другие форматы(PNG,TGA,PCX), а самое главное как написать самому загрузчик?


Вернуться к началу
  
 
 Заголовок сообщения: Как написать загрузчик BMP файлов
СообщениеДобавлено: 08 июн 2006 13:46 
Уважаемый господин Margenal я недавно начал изучать язык программирования "Си".Изучил его только наполовину.Язык Delphi
не знаю , C++ только собираюсь изучать.Вы наверное шутите когда предлогаите мне переписать код с Delphi на C++?

Уважаемый MagicWolf естественно мне хочется написать всё самому.Потому что если хочешь научится писать игры пиши всё сам.

Можно по подробнее про DevIL, впервые об этом слышу.
Хотелось бы узнать что это такое,для чего нужно?
На каком языке написано и где можна скачать?


Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: 08 июн 2006 16:38 
Не в сети
Гуру
Аватара пользователя

Зарегистрирован: 03 авг 2004 10:37
Сообщения: 2694
Voland писал(а):
Уважаемый Гуру MagicWolf ваш господин Трухильо которого вы так хорошо рекламируите на сайте использует DirectDraw с MFC APP Wizard,
а я использую Win32 API без MFC.Можно ли его переделать под Win32 API?


Почему же нельзя-то! Конечно можно, там MFC только для удобства используется. Вполне можно написать тоже самое и на C++ без MFC.

Voland писал(а):
Если бы я ещё знал как использовать эти самые либы.


Какие?

Voland писал(а):
Единственая книга по DirectX которая уменя, есть это Программирование игр для Windows.
Автор в ней пишет, что загрузить bmp файл можно двумя способами: воспользоваться функцией Win32 API или самому написать загрузчик файлов.Поскольку постичь принцеп действия функции Win32 API обычно так же сложно,как и написать свои собственный.Поэтому автор не пишет как написать собственный загрузчик, мотивируя это тем что это очень сложно, и поэтому даёт уже готовый загрузчик.


Почему сложно-то??? IPicture - довольно простой код!

Voland писал(а):
Я пытался разобрать код этого загрузчика , но так и не смог понять как переделать его чтобы он мог загружать другие форматы(PNG,TGA,PCX), а самое главное как написать самому загрузчик?


Какой загрузчик ты разбирал?

_________________
С уважением, Сергей


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как написать загрузчик BMP файлов
СообщениеДобавлено: 08 июн 2006 16:40 
Не в сети
Гуру
Аватара пользователя

Зарегистрирован: 03 авг 2004 10:37
Сообщения: 2694
Voland писал(а):
Уважаемый господин Margenal я недавно начал изучать язык программирования "Си".Изучил его только наполовину.Язык Delphi
не знаю , C++ только собираюсь изучать.Вы наверное шутите когда предлогаите мне переписать код с Delphi на C++?

Уважаемый MagicWolf естественно мне хочется написать всё самому.Потому что если хочешь научится писать игры пиши всё сам.

Можно по подробнее про DevIL, впервые об этом слышу.
Хотелось бы узнать что это такое,для чего нужно?
На каком языке написано и где можна скачать?


http://openil.sourceforge.net/ - Developer's Image Library (DevIL) is a programmer's library to develop applications with very powerful image loading capabilities, yet is easy for a developer to learn and use. Ultimate control of images is left to the developer, so unnecessary conversions, etc. are not performed. DevIL utilizes a simple, yet powerful, syntax. DevIL can load, save, convert, manipulate, filter and display a wide variety of image formats.

Currently, DevIL can load .bmp, .cut, .dds, .doom, .gif, .ico, .jpg, .lbm, .mdl, .mng, .pal, .pbm, .pcd, .pcx, .pgm, .pic, .png, .ppm, .psd, .psp, .raw, .sgi, .tga and .tif .hdr files.
Formats supported for saving include .bmp, .dds, .h, .jpg, .pal, .pbm, .pcx, .hdr, .pgm,.png, .ppm, .raw, .sgi, .tga and .tif.

DevIL currently supports the following APIs for display: OpenGL, Windows GDI, SDL, DirectX and Allegro. Compilers that can compile DevIL or use it include Djgpp, MSVC++, Linux gcc, Delphi, Visual Basic, Power Basic and Dev-C++.

Currently, DevIL can load .bmp, .cut, .dds, .doom, .gif, .ico, .jpg, .lbm, .mdl, .mng, .pal, .pbm, .pcd, .pcx, .pgm, .pic, .png, .ppm, .psd, .psp, .raw, .sgi, .tga and .tif .hdr files.
Formats supported for saving include .bmp, .dds, .h, .jpg, .pal, .pbm, .pcx, .hdr, .pgm,.png, .ppm, .raw, .sgi, .tga and .tif.

DevIL currently supports the following APIs for display: OpenGL, Windows GDI, SDL, DirectX and Allegro. Compilers that can compile DevIL or use it include Djgpp, MSVC++, Linux gcc, Delphi, Visual Basic, Power Basic and Dev-C++.

Что еще надо программеру!?

_________________
С уважением, Сергей


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 08 июн 2006 18:13 
MagicWolf ты написал: Но если есть готовые либы, то зачем писать свои!
Я ответил тебе на это: Если бы я ещё знал как использовать эти самые либы?
На мой ответ ты написал: Какие?
Если тебе не понятно что-то в моё ответе, будь любезен напиши что имено
тебе неясно


Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: 08 июн 2006 18:18 
MagicWolf тебя за интересовал код загрузчика который я разбирал.
Вот он:

// container structure for bitmaps .BMP file
typedef struct BITMAP_FILE_TAG
{
BITMAPFILEHEADER bitmapfileheader; // this contains the bitmapfile header
BITMAPINFOHEADER bitmapinfoheader; // this is all the info including the palette
PALETTEENTRY palette[256]; // we will store the palette here
UCHAR *buffer; // this is a pointer to the data

} BITMAP_FILE, *BITMAP_FILE_PTR;


int Load_Bitmap_File(BITMAP_FILE_PTR bitmap, char *filename)
{
// this function opens a bitmap file and loads the data into bitmap

int file_handle, // the file handle
index; // looping index

UCHAR *temp_buffer = NULL; // used to convert 24 bit images to 16 bit
OFSTRUCT file_data; // the file data information

// open the file if it exists
if ((file_handle = OpenFile(filename,&file_data,OF_READ))==-1)
return(0);

// now load the bitmap file header
_lread(file_handle, &bitmap->bitmapfileheader,sizeof(BITMAPFILEHEADER));

// test if this is a bitmap file
if (bitmap->bitmapfileheader.bfType!=BITMAP_ID)
{
// close the file
_lclose(file_handle);

// return error
return(0);
} // end if

// now we know this is a bitmap, so read in all the sections

// first the bitmap infoheader

// now load the bitmap file header
_lread(file_handle, &bitmap->bitmapinfoheader,sizeof(BITMAPINFOHEADER));

// now load the color palette if there is one
if (bitmap->bitmapinfoheader.biBitCount == 8)
{
_lread(file_handle, &bitmap->palette,MAX_COLORS_PALETTE*sizeof(PALETTEENTRY));

// now set all the flags in the palette correctly and fix the reversed
// BGR RGBQUAD data format
for (index=0; index < MAX_COLORS_PALETTE; index++)
{
// reverse the red and green fields
int temp_color = bitmap->palette[index].peRed;
bitmap->palette[index].peRed = bitmap->palette[index].peBlue;
bitmap->palette[index].peBlue = temp_color;

// always set the flags word to this
bitmap->palette[index].peFlags = PC_NOCOLLAPSE;
} // end for index

} // end if

// finally the image data itself
_lseek(file_handle,-(int)(bitmap->bitmapinfoheader.biSizeImage),SEEK_END);

// now read in the image, if the image is 8 or 16 bit then simply read it
// but if its 24 bit then read it into a temporary area and then convert
// it to a 16 bit image

if (bitmap->bitmapinfoheader.biBitCount==8 || bitmap->bitmapinfoheader.biBitCount==16 ||
bitmap->bitmapinfoheader.biBitCount==24)
{
// delete the last image if there was one
if (bitmap->buffer)
free(bitmap->buffer);

// allocate the memory for the image
if (!(bitmap->buffer = (UCHAR *)malloc(bitmap->bitmapinfoheader.biSizeImage)))
{
// close the file
_lclose(file_handle);

// return error
return(0);
} // end if

// now read it in
_lread(file_handle,bitmap->buffer,bitmap->bitmapinfoheader.biSizeImage);

} // end if
else
{
// serious problem
return(0);

} // end else

#if 0
// write the file info out
printf("\nfilename:%s \nsize=%d \nwidth=%d \nheight=%d \nbitsperpixel=%d \ncolors=%d \nimpcolors=%d",
filename,
bitmap->bitmapinfoheader.biSizeImage,
bitmap->bitmapinfoheader.biWidth,
bitmap->bitmapinfoheader.biHeight,
bitmap->bitmapinfoheader.biBitCount,
bitmap->bitmapinfoheader.biClrUsed,
bitmap->bitmapinfoheader.biClrImportant);
#endif

// close the file
_lclose(file_handle);

// flip the bitmap
Flip_Bitmap(bitmap->buffer,
bitmap->bitmapinfoheader.biWidth*(bitmap->bitmapinfoheader.biBitCount/8),
bitmap->bitmapinfoheader.biHeight);

// return success
return(1);

} // end Load_Bitmap_File


Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: 09 июн 2006 01:03 
Не в сети
Любитель
Аватара пользователя

Зарегистрирован: 07 июн 2006 00:37
Сообщения: 27
Откуда: cemetery
2Voland посмотри сдесь:

http://groups.google.com/group/comp.gam ... 5859db627c

_________________
people = shit


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 09 июн 2006 01:07 
Не в сети
Любитель
Аватара пользователя

Зарегистрирован: 07 июн 2006 00:37
Сообщения: 27
Откуда: cemetery
2Voland и вот сдесь ещё:

http://groups.google.com/group/microsof ... ctDraw+BMP

_________________
people = shit


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 37 ]  На страницу 1, 2, 3  След.

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB