Форум: "Игры";
Текущий архив: 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.041 c