-
Доброго Вам времени суток!!! У меня вопрос по поводу библиотеки DevIL кто нибудь знает какой функцией и вообще как можно вытянуть текстуру из *.tex файлов примерно как это делает TextureViewer у меня есть http://www.koders.com/delphi/fidE2FE8AB223C6466A72FB1E175B94EEDD098F4142.aspx?s=opengl#L86и я продвинулся до стадии
procedure TForm1.Button1Click(Sender: TObject);
var imgID:Cardinal;p:Pointer;f:Integer;b:Byte;
begin
OpenDialog1.InitialDir:=ExtractFilePath(Application.ExeName);
if OpenDialog1.Execute then
begin
ilInit;
ilEnable( IL_FILE_OVERWRITE );
ilGenImages(1,@imgID);
ilBindImage(imgid);
ilLoadImage(PChar(OpenDialog1.FileName));
Image1.Picture.Bitmap.Width := ilGetInteger(IL_IMAGE_WIDTH);
Image1.Picture.Bitmap.Height :=ilGetInteger(IL_IMAGE_HEIGHT);
ilConvertImage( ilGetInteger(IL_IMAGE_FORMAT) ,IL_BMP);
ilSaveImage(PChar('ura.bmp'));
Image1.Picture.Bitmap.LoadFromFile('ura.bmp');
end;
end;
но когда *.tex -> ura.bmp то там серый квадрат 1x1 а если подкидываю *.jpg,*.bmp и т.д. -> ura.bmp то код работает p.s. посмотрел TextureViewer блокнотом там точно используются функции ilDeleteImages, ilSaveImage, ilTexImage, ilOriginFunc, ilEnable, ilBindImage, ilGenImages, ilInit других я не нашел Заранее спасибо если кто сможет мне помочь...
-
Откуда уверенность, что OpenIL поддерживает этот формат? Я никаких упоминаний *.tex формата в хедерах DevIl а не нашел. а вы?
-
> p.s. > посмотрел TextureViewer блокнотом там точно используются > функции > ilDeleteImages, ilSaveImage, ilTexImage, ilOriginFunc, ilEnable, > ilBindImage, ilGenImages, ilInit других я не нашел >
TextureViewer.exe+DevIL.dll работает как надо
-
> TextureViewer.exe+DevIL.dll работает как надо
и что? Где написано что TextureViewer грузит tex черещ DevIL? может стоит прочитать спецификацию DevIl'a? А еще я рекоменду проверить, как отработала процедура ilLoadImage. 99% что ошибка.
-
вот как раз в этом и проблема.... ilLoadImage а в прочем все ilLoad... возвращают ошибку.... возможно, что TextureViewer сначала урезает файл а потом остаток прогоняет через Devil, но скорее всего использует функции Devil.... если Вы не разбираетесь в функциях Devil то какой смысл засорять топик? Мне бы хоть разобраться как пользоваться функциями:
ilTexImage(Width, Height, Depth: TILuint; Bpp: TILubyte; Format, _Type:
TILenum; Data: Pointer): TILboolean;
ilOriginFunc(Mode: TILenum): TILboolean;
может после этого я смогу понять что к чему... TextureViewer меня не устраивает потому что он открывает по 1 файлу
-
-
> возможно, что TextureViewer сначала урезает файл а потом > остаток прогоняет через Devil, но скорее всего использует > функции Devil
Дар прорицания? Или всетаки есть основания так утверждать?
-
var b:byte; .....
b:=ilLoad(IL_TYPE_UNKNOWN,PChar(OpenDialog1.FileName)); b:=ilGetError;
ShowMessage(inttostr(b));
....
b=0 тоесть IL_NO_ERROR
-
> Дар прорицания? Или всетаки есть основания так утверждать?
присутствие в exe функций fopen, fread, fclose
-
DTX1, DTX3, DTX5, A8R8G8B8 вот основные форматы которые меня интересуют но все равно не пойму Devil их поддерживает или ....
-
> b=0 тоесть IL_NO_ERROR
Не стыкуется с
> ilLoadImage а в прочем все ilLoad... возвращают ошибку....
> присутствие в exe функций fopen, fread, fclose
не вижу связи.
> [9] policeofstv © (22.05.08 09:33)
Список того, что поддерживает DevIl #define IL_BMP 0x0420 #define IL_CUT 0x0421 #define IL_DOOM 0x0422 #define IL_DOOM_FLAT 0x0423 #define IL_ICO 0x0424 #define IL_JPG 0x0425 #define IL_JFIF 0x0425 #define IL_LBM 0x0426 #define IL_PCD 0x0427 #define IL_PCX 0x0428 #define IL_PIC 0x0429 #define IL_PNG 0x042A #define IL_PNM 0x042B #define IL_SGI 0x042C #define IL_TGA 0x042D #define IL_TIF 0x042E #define IL_CHEAD 0x042F #define IL_RAW 0x0430 #define IL_MDL 0x0431 #define IL_WAL 0x0432 #define IL_LIF 0x0434 #define IL_MNG 0x0435 #define IL_JNG 0x0435 #define IL_GIF 0x0436 #define IL_DDS 0x0437 #define IL_DCX 0x0438 #define IL_PSD 0x0439 #define IL_EXIF 0x043A #define IL_PSP 0x043B #define IL_PIX 0x043C #define IL_PXR 0x043D #define IL_XPM 0x043E
-
b:=ilLoad(IL_TYPE_UNKNOWN,PChar(OpenDialog1.FileName)); собственно и это тоже дает 0 что означает не загрузил ничего в память b:=ilGetError; дает 0 означает, что не было ошибки
// Image types IL_TYPE_UNKNOWN = $0000; IL_BMP = $0420; IL_CUT = $0421; IL_DOOM = $0422; IL_DOOM_FLAT = $0423; IL_ICO = $0424; IL_JPG = $0424; IL_LBM = $0426; IL_PCD = $0427; IL_PCX = $0428; IL_PIC = $0429; IL_PNG = $042A; IL_PNM = $042B; IL_SGI = $042C; IL_TGA = $042D; IL_TIF = $042E; IL_CHEAD = $042F; IL_RAW = $0430; IL_MDL = $0431; IL_WAL = $0432; IL_LIF = $0434; IL_MNG = $0435; IL_JNG = $0435; IL_GIF = $0436; IL_DDS = $0437; IL_DCX = $0438; IL_PSD = $0439; IL_EXIF = $043A; IL_PSP = $043B; IL_PIX = $043C; IL_PXR = $043D; IL_XPM = $043E;
IL_JASC_PAL = $0475;
надо же я оказывается это знал... но это не решает саму проблему.... DTX1, DTX3, DTX5, A8R8G8B8 как насчет форматов может есть еще способ их прочесть?
-
> DTX1, DTX3, DTX5, A8R8G8B8 как насчет форматов может есть > еще способ их прочесть?
Это случайно не форматы DirectX? Если да - то открывай средствами DirectX. Если это форматы специфичные для какой то программы - ищи описание формата и делай свой загрузчик.
-
да это форматы 2D текстур DirectX .... но мне это мало о чем говорит....
> Если да - то открывай средствами DirectX.
есть реальное решение где об этом можно больше узнать.... или конкретный пример.... задача простая есть файл с каким то из этих форматов ... нужно открыть и сохранить в bmp
-
> [13] policeofstv © (22.05.08 11:09)
www.mirgames.ru Там есть пример работы с DirectX под Дельфи.
-
-
> вот похоже все что я искал ... теперь осталось изучить язык > c++ ...
ЗАчем? Вызов функций API не зависит от языка.
-
но эту функцию то надо на русский язык (Delphi) перевести
unsigned loadTexture3D ( const char * fileName, bool mipmap )
glTexImage3DEXT ( GL_TEXTURE_3D_EXT, 0, fmt, width, height, depth, 0, fmt, type, ilGetData () );
glTexParameteri ( GL_TEXTURE_3D_EXT, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
glTexParameteri ( GL_TEXTURE_3D_EXT, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
glTexParameteri ( GL_TEXTURE_3D_EXT, GL_TEXTURE_WRAP_S, GL_REPEAT );
glTexParameteri ( GL_TEXTURE_3D_EXT, GL_TEXTURE_WRAP_T, GL_REPEAT );
glTexParameteri ( GL_TEXTURE_3D_EXT, GL_TEXTURE_WRAP_R, GL_REPEAT );
glBindTexture ( GL_TEXTURE_3D_EXT, 0 );
ilDeleteImages ( 1, &texId );
return id;
}
-
> [17] policeofstv © (22.05.08 14:30) >
Здесб 95% кода = вызов API. Действительно просто так скопипастить не получится. а если хоть чуть вникнуть - все сразу становится понятно и без знания языка.
|