Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Игры";
Текущий архив: 2005.06.14;
Скачать: [xml.tar.bz2];

Вниз

"Потрошитель" GTA. Парсер и конвертор dff и txd файлов.   Найти похожие ветки 

 
Alek Aaz   (2005-03-03 13:28) [0]

Чой-то не хватает мне знаний и опыту... помогайте кто чем может... Дело думаю стоещее и полезное для начинающих девелоперов будет.
================
В общем задумал сделать конвертор из dff+txd в smd"шный (можно в принципе и в 3ds или md2,  md3 формат.) dffки и txdшки находятся в gta3.img файле. Грубо dff можно разделить на:
модели зданий
модели людей
модели транспорта
модели территорий
модели элементов ландшафта
Больше всего интересуют конечно первые три категории. Кстати, кажется, что анимация в GTA скелетная, но с файлами анимации я пока не разбирался.
Самое ценное и полезное - это конечно модели транспорта. Я бы сказал, что их уже неприличное количество т.к. есть тачки из GTA, GTA VC + на подходе GTA San Angeles + огромное количество модов  и т.п.
dff состоят из фреймов. Во фреймах различные варианты отображения модели. Низкополигональная модель машинки, среднеполигональная модель, детали качественной модели, деформированные детали модели и колеса. Для моделей транспорта названия фреймов одинаковые. Собственно по названию фреймов можно определить к какому типу относится dff файл. Если пытаться конвертировать в 3ds через тот-же Zmodeller, то он запихивает все фреймы в одну модель (в том числе и колеса), при этом урезает названия фреймов и как-то глючно накладывает текстуры. В своем конверторе можно, например, сделать чтобы dff  конвертировалась в кучку файлов. Желательно без колес. Далее запихивать в GLScene и прикручивать ODE как это сделал K00m в своей демке.
Лично мне нужны здания и людишки.
За основу решил взять Moo Mapper (for GTA III and Vice City) - Beta 0.90 т.к. он опенсорсе и к тому-же на Delphi 7. :) (и это главное :) ) Исходники есть на http://www.chronetal.co.uk/gta/
Редактор посматривает dff и txd"шки, позволяет их извлекать из файла gta3.img пашет на чистом opengl и требует установленной GTA3. В исходниках есть описание img, dff и txd структур. Ну и как отображать средствами OpenGL все это добро.
ИМХО алгоритм работы парсера:
1. Определить имеющиеся в наличности текстуры из txd файла(ов). Иногда названия dff файла не совпадают с названием txd файла в котором находятся необходимые текстуры.
2. Загружаем dff файл и "потрошим" его по фреймам
3. Сравниваем список имеющихся текстур с нужным
4. Определяем к какому типу моделей относится текущая модель (здание, чел, машинка)
5. Сохраняем в нужном формате (например- текстуру в bmp или tga, здание в 3ds, чела в smd, машину в кучку md2??? Ну или все(естесно кроме текстур) одним типом файла (ИМХО - smd)
========================
Как последний ламер уткнулся на первом-же пункте. Хотел составить список текстур в файле .tdx С дец подправил файлик GTATxd.pas, структуру TGTATxd привел в такой вид:

 TGTATxd = class
 private
   FData: PChar;

   Stream: TStream;
   FStart, FSize: Int64;

   procedure ParseFile;
 public
   Name: String;
   Loaded, InUse: Boolean;

   Image: array of TTexture;
   ImageTexture: array of GLuint;
   ImageCount: LongWord;
   ImageNameList, ImageAlphaList: TStringList;

   constructor Create; overload;
   constructor Create(st: TStream; in_name: String; in_start, in_size: Int64); overload;
   destructor Destroy; override;

   procedure LoadFromStream;
   procedure Unload;
 end;
Ну и еще там по мелочи... в GLView.pas убрал процедуры отображения ....

Чсно сознаюсь - не великий я программер... Сделал так:

Var
   txd1: TGTATxd;
/////
....Skip....
////
procedure TForm1.Button1Click(Sender: TObject);
Var F:TFileStream;
begin
f.Create(NameFile,fmOpenRead);
txd1.Create(f,NameFile,0,512);
txd1.LoadFromStream;
end;

Ошибка вылезла тут
constructor TGTATxd.Create(st: TStream; in_name: String; in_start, in_size: Int64);
begin
 inherited Create;
>>>>>>>>>>>>>>>> ImageNameList := TStringList.Create;<<<<<<<<<<
 ImageNameList.CaseSensitive := False;
 ImageAlphaList := TStringList.Create;
 ImageAlphaList.CaseSensitive := False;
//  Name := ChangeFileExt(in_name, "");
 Loaded := False;
 Stream := St;
 FStart := in_start;
 FSize := in_size;
 InUse := False;
 LoadFromStream;
end;
Обращение к участку памяти ... бла, бла, бла.... Чую, что напортачил с txd1 ...


 
Ку   (2005-03-04 01:56) [1]

Зачем конвертировать в smd ? Для GLScene есть загрузчик dff-моделей. Роджер Као его делал. Правда грузит только карты. И плохо генерирует нормали. ( Хотя кто вообще знает как их хорошо генерировать ? )  И текстуры надо предварительно конвертировать в tga, так как в Вайс Сити многие текстуры хранятся в сжатом формате, а GLScene не работате со сжатыми текстурами, поэтому надо либо голый OpenGL использовать, либо расзжимать.

Но, в общем это ерунда, а самое сложно, это реализовать заргузку на лету. Чтобы одни части города динамически загружались в память, а другие выгружались. Я грузил Вайс Сити частями, и даже катался на автомобиле ODEшном по ним. Но как динамически их подгружать и выгружать - не знаю. В общем большая проблема.


 
Alek Aaz   (2005-03-04 03:18) [2]

> Для GLScene есть загрузчик dff-моделей. Роджер Као его делал.
Где он? Плиззз....


 
Ку   (2005-03-05 01:09) [3]


> Alek Aaz   (04.03.05 03:18) [2]
> Где он?

Поиск по ньюсгруппе GLScene.


 
Alek Aaz   (2005-03-05 04:33) [4]

2Kу
> Поиск по ньюсгруппе GLScene.
Не находит. OutLook грузит только 1000 заголовков из 38000. Opera вообще черт знает как работает. Может вышлешь на ang2000@yandex.ru И кстате, в какой? general или support?
----
Щас свой newsviewer сваяю :)


 
Ку   (2005-03-06 01:44) [5]


> Alek Aaz   (05.03.05 04:33) [4]
> Не находит. OutLook грузит только 1000 заголовков из 38000.

Не правда. Грузит горазды больше. Нажми ещё раз на загрузить --- заголовков.
И убери галочку в параметрах "Удалять сообщения групп новостей через 5 дней.


> И кстате, в какой? general или support?

Генеральный. Сообщение от 18.12.2004


> Может вышлешь на ang2000@yandex.ru

Чё то мне лень, если честно. Может как нибудь в другой раз.


 
Alek Aaz   (2005-03-08 10:02) [6]


dikoe Kenguru
13 декабря 2004 г. 11:29
I want to load GTA3 and Vice City map in GLScene

I dream about GLSceneViceCity. :)

Moo Mapper http://www.chronetal.co.uk/gta/
It is GTA3 and Vice City editor. With the source. Delphi 7.
http://sourceforge.net/projects/moomapper
But it use OpenGL. Not GLScene.
I think that it would be very cool to load Vice city in GLScene and combine
it with k00m ODE-car demo, for example. Or with DCE or with something
similar.
But i don"t know how to do it. :(
Is it so hard to convert OpenGL to GLScene ?

У дураков мысли сходятся... :)

Ку ОГРОМНОЕ спасибо.

Но, в общем это ерунда, а самое сложно, это реализовать заргузку на лету. Чтобы одни части города динамически загружались в память, а другие выгружались. Я грузил Вайс Сити частями, и даже катался на автомобиле ODEшном по ним. Но как динамически их подгружать и выгружать - не знаю. В общем большая проблема.
Т.е.? Если можно поподробней. В чем конкретно?


 
Вадя   (2005-03-09 01:15) [7]

// Off-topic
Почему так много внимания именно GTA? Как мне кажется, лучше было выбрать за цель Mafia. И известны ли такие интузиасты? :)


 
Ку   (2005-03-09 01:52) [8]


> Alek Aaz   (08.03.05 10:02) [6]
> У дураков мысли сходятся...

В смысле ?


> I dream about GLSceneViceCity. :)

Да, да, да. Это я дрим эбаут это самое. Как же давно это было.


> Т.е.? Если можно поподробней. В чем конкретно?

Посчитай из скольикх dff-файлов состоит Vice City. Из десятков тысяч, с миллионами полигонов. Как ты их будешь загружать и отображать ? Заранее предупреждаю, что всё разом не получится. В общем задумайся над проблемой и поймёшь.


> Вадя   (09.03.05 01:15) [7]
> Почему так много внимания именно GTA? Как

Потому, что ГТА и Вайс Сити у меня есть. Скачал я их. А Мафии нет. Я её видел, но она слишком здоровая была, чтобы качать.


 
Alek Aaz   (2005-03-09 05:26) [9]

Ку   (09.03.05 01:52) [8]
>> Alek Aaz   (08.03.05 10:02) [6]
>> У дураков мысли сходятся...
>В смысле ?

Сравни:

Alek Aaz
Далее запихивать в GLScene и прикручивать ODE как это сделал K00m в своей демке.


dikoe Kenguru
I think that it would be very cool to load Vice city in GLScene and combine it with k00m ODE-car demo, for example.

:)


> Т.е.? Если можно поподробней. В чем конкретно?
Посчитай из скольикх dff-файлов состоит Vice City. Из десятков тысяч, с миллионами полигонов.

У страха глаза велики. В файле gta3.img 3856 объектов. Чуть меньше половины из них это txd файлы. Остается около 2000 моделей. В том числе модели LOD-частей островов. В частности, когда мы находимся на одном острове другой на самом деле состоит не из множества отдельно стоящих домов и пальм, а одной, сильно урезанной моделью. Минус людишки которые в данной местности не встречаются.
Итого в сцене на конкретном острове нужно отображать от силы 500-1000 моделей. Вернее, это число моделей необходимое иметь в памяти. Смена детализаци с загрузкой более детализованной модели из файла - лажа. Отображать в сцене можно и того меньше, с учетом  скрытия невидимых в данный момент объектов. Много-полигональными (10000-80000 полигонов) являются от силы 50 моделек около героя. Так что... Кроме того, Никто не заставляет делать игру со всеми 3-мя островами. Можно для начала сварганить один островок. А там видно будет.
ИМХО. Если вы создаете свою 3Д игру, то манипуляцию с модельками все-же придется осваивать. И чем больше моделек тем интереснее будет игра. Можно конечно обойтись шариками и кубами, но зачем тогда свое время гробить? GTA3 хороший пример того как надо делать игру с большим числом разнообразных объектов в игре. Собственно "потрошитель" и задумывался для того, чтобы ресурсы зарытые в игре были доступны для самодельных проектов, для редакторов карт которые народ ваяет для своих игр. Именно по этому мне кажется нужен именно конвертор в "нормальные" форматы.
Можно также подумать о своем формате файла моделек в котором бы хранились, как например в dff файлах машинок, разные уровни детализации объекта.  

Вадя   (09.03.05 01:15) [7]
// Off-topic
Почему так много внимания именно GTA? Как мне кажется, лучше было выбрать за цель Mafia. И известны ли такие интузиасты? :)

С GTA бы разобраться :) Насколько помню в Mafiи все более привязано к сюжету. Свободы нет. Ну не люблю я ее, не люблю :)
А энтузиасты?... Нее я не слышал...


 
Ку   (2005-03-10 03:50) [10]


> В файле gta3.img 3856 объектов. Чуть меньше половины из них
> это txd файлы.

Да, только файлы типа txd, представляют из себя своего рода архив картинок. Например admiral.txd - архив всех картинок для одноимённого автомобиля. Которые, кстати, частично в сжатом формате, неподдерживаемым GLScene.


> Остается около 2000 моделей.

Причём некоторые dff-файлы состоят из нескольких моделей ...


> Можно для начала сварганить один островок. А там видно будет.

Делал уже. Не все, но много островов в низком качестве. И катался по ним. Но "там видно" не стало.

Нужен менеджер, который бы динамически подгружал и выгружал отдельные части карты. Причём желательно, чтобы он работал не с отдельными dff-файлами. А напрямую с архивоми GTA3 и Vice City.

Я начал было его писать, но упёрся в проблему компрессированых текстур, которые GLScene не поддерживает. А разпаковывать и грузить в распакованном виде - это неправильный подход. Кстати, так Стюард и сделал в своём загрузчике DDS-файлов : DDS.pas .


 
Alek Aaz   (2005-03-10 13:07) [11]

2Ку
В любом случае, кроме менеджера, если ты хочешь сделать что-то больше чем кататся по городу на машинке и любоваться на пейзаж за окном, тебе нужен будет свой редактор уровня, чтобы разбросать события, пути врагов, way-поинты, самих врагов, бонусы, оружие и т.д. и т.п. Кроме этого, выдирать анимацию из ipf, разбираться с картой локаций и прочая, и прочая...  
Так на кой извращаться и делать бледную ксерокопию менеджера GTA3, который кстати наверняка "заточен" под DirectX, когда можно конвертнуть ресурсы в милый сердцу 3ds и грузить когда вздумается, что вздумается и как вздумается?


 
Ку   (2005-03-11 01:31) [12]


> Alek Aaz   (10.03.05 13:07) [11]
> тебе нужен будет свой редактор уровня,

Сто лет как написан. В нём я и собирал кусочки низкополигонных моделей ВайсСити, в одну большую карту, чтобы по ней кататься.
Первая его версия была в моих гонках SimRace. ( Если их не удалили с kreker.info-com.ru )
Там можно из 3ds-моделей или из dff-файлов собирать одну большую карту. Только это не то, потому, что нужна загрузка на лету (on fly).


> GTA3, который кстати наверняка "заточен" под DirectX

Нет. С OpenGL там проблем я не увидел. А с GLScene только компрессированные текстуры.


> когда можно конвертнуть ресурсы в милый сердцу 3ds

И сложить тысячи файлов в одну папку, плюс ещё много тысяч текстур, и получить тормоза от файловой системы ?

Их для того и упихали в одни файл, чтобы работать с поинтерами и потоками в этом файле. А не с именами файлов, и тормозными файловыми операциями.


 
Alek Aaz   (2005-03-11 04:36) [13]


> когда можно конвертнуть ресурсы в милый сердцу 3ds
И сложить тысячи файлов в одну папку, плюс ещё много тысяч текстур, и получить тормоза от файловой системы ?

Может сделать свой формат? Там в ньюсгруппе проскальзывало что-то про b3d формат и создание нового на основе XML. Вроде была подана идея использовать новый x3d.
ИМХО
Файл модели должен состоять из следующих секций (кажется dff частично из них и состоит)
[info]-общая информация
[state]-состояния в которых может быть модель.
[mesh]-секция с описанием модели и уровней детализации
[skin]-текстуры
[ode]-"объемы" и "физические" параметры для ODE
[animation]-скелетная анимация (если надо) для состояний модели
[effect]-спецэффекты для состояний и их типы, параметры и координаты на модели (например дым, огонь, стоп-сигналы и т.д.)
[sound]-звук, для состояний модели
Судя по всему самыми "тяжелыми" будут модели транспорта с учетом звука и текстур будут тянуть на несколько мегов.
Чесно говоря не умею работать с потоками и незнаю, насколько быстро будет грузится такой файл.
Кстати, в GLScene можно сделать скажем LODActor? Грузим 3 модели человека разной детализации. Скелет один. Анимация одна на все модели?


 
Alek Aaz   (2005-03-11 08:55) [14]

2Ку
Ну есть тут у меня в загашнике код не код, но кое-что интересное по декомпрессии txd-шок. Кажется это исходник  dxt.dll которую юзает TXDWorkshop. Навскидку - запихивает в и выдерает из txd картинки в bmp или tga файлы. Надо?


 
Ку   (2005-03-12 01:58) [15]


> Alek Aaz   (11.03.05 08:55) [14]
> 2Ку
> Ну есть тут у меня в загашнике код не код, но кое-что интересное
> по декомпрессии txd-шок. Кажется это исходник  dxt.dll которую
> юзает TXDWorkshop. Навскидку - запихивает в и выдерает из
> txd картинки в bmp или tga файлы. Надо?

Не надо. Я писал декомпрессор. Правда только в bmp. А надо в tga, чтобы прозрачность была. Но это в принципе ерунда.

Проблема в том, что объём возрастает во много раз после декомрессии. И получишь вместо 300 мегабайт комрессированных текстур где-нибудь гигабайт не комрессированных.

Поэтому правильный подход, это научиться грузить в GLScene сразу компрессированные текстуры. Или надеяться, что сами Джиэльсценьщики добавят туда эту фичу.


 
Ку   (2005-03-12 02:07) [16]


> Alek Aaz   (11.03.05 04:36) [13]
> Чесно говоря не умею работать с потоками и незнаю, насколько
> быстро будет грузится такой файл.

Безобразие. Большой пробел в знаниях. Надо изучить. TStream, TMemoryStea, TFileStream. Нажми F1 на них и изучи. Всего две команды Read и Write. И установка поинтера. Научись писать и читать из потока переменные, массивы, рекорды.


> Файл модели должен состоять из следующих секций

Я хочу только карту сначала. Без моделей звука и прочего.


> [ode]-"объемы" и "физические" параметры для ODE

Колллизии хранятся в файлах col. Я где то в ньюсгруппе постил загрузчик col-файлов для DCE. Хочешь глянь.


 
Ку   (2005-03-14 01:36) [17]


> Alek Aaz

Как, разобрался с потоками ?

var
 k  : Integer;
 st : TStream;
 Arr : array [0..3] of Integer;
begin
   // Создаём файл-поток.
 st1 := TFileStream.Create("file.bin", fmCreate);
 try
   k := 7;
   //  Пишем туда k
   st.Write(k, SizeOf(Integer));
   // Пишем массив.
   st.Write(Arr[0], Length(Arr)*SizeOf(Integer));
   // Читаем оттуда аналогично, с помощью команды Read. Двигаем указатель по потому через st.Position :=
 finally
   st.Free;
 end;


 
Alek Aaz   (2005-03-14 06:56) [18]

> Alek Aaz
Как, разобрался с потоками ?

Ну я не такой метеор как ты :)

За пример конечно спасибо, но больше всего интересует пример
как запихать кучку smd и bmp файлов от тринити в один xml файлик.


 
Ку   (2005-03-15 01:49) [19]


> Alek Aaz   (14.03.05 06:56) [18]
> Ну я не такой метеор как ты :)

Да, нет. Я же не за один день всё это про ГТА делал. Это всё с прошлого года тянется из Ньюсгруппы ДжиЭльСценовской. Так, что наоборот медленно.


> как запихать кучку smd и bmp файлов от тринити в один xml
> файлик.

Это я не знаю. А в потом - легко. Только вот как картинки грузить потом ? Ведь когда GLScene грузит модель, то она картинки для неё в текущей папке ищет. А если их самому грузить заранее, то собъются параментры настроек материи. Ведь материя - это не только текстура.



Страницы: 1 вся ветка

Форум: "Игры";
Текущий архив: 2005.06.14;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.53 MB
Время: 0.035 c
4-1114248673
Max-F
2005-04-23 13:31
2005.06.14
Определение пути текущей папки


6-1111742525
X-Disa
2005-03-25 12:22
2005.06.14
Проверка существования файла


1-1117280052
LubaAL
2005-05-28 15:34
2005.06.14
Фон формы


14-1116827557
syte_ser78
2005-05-23 09:52
2005.06.14
Проблемы с DrDivx 1.06


4-1114194670
Merl
2005-04-22 22:31
2005.06.14
Растягивание формы





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский