Войти
ПроектыФорумУтилиты

TDG 3D Engine - движок с неполигональным collision detection и response. (3 стр)

Страницы: 1 2 3 4 Следующая »
#30
14:17, 6 янв. 2009

ни одна ссылка не работает. А можно посмотреть исходники расчета tangent space ?


#31
16:46, 6 янв. 2009

andycount
>ни одна ссылка не работает. А можно посмотреть исходники расчета tangent space?
из первого поста должны работать ссылки, недавно отредактировал

исходники расчёта tangent space в файле mymodels.pas, есть три процедуры на выбор:

procedure buildFaceTBNgamedevru(var faces:TPolygons; verts:TMyVectors);
procedure buildFaceTBNhumus(var faces:TPolygons; verts:TMyVectors);
procedure buildFaceTBN(var faces:TPolygons; verts:TMyVectors);

с каждой свои недостатки, идеальный вариант найден не был, остановился на первом с gamedev.ru где-то в марте 2008 =)

#32
23:21, 2 фев. 2009

Для скачивания стала доступна версия 2006 года, для тех кому хотелось более простой исходник неполигональной проверки столкновений по z-buffer CDNR-1 (Collision Detection aNd Response). В отличие от новой версии TDG 3D, старая версия обладает большой прожорливостью оперативной памяти.

http://www.igrodel.ru/tdg3d/cdnr110.zip - 160kb (исходники delphi + exe)

#33
17:42, 4 фев. 2009

А как быть с разрушаемыми уровнями !?

А почему бы не хранить Z данные для каждого полигона в отдельности (рельеф на полигоне) - ну там где она действительно необходима (Paralax Mapping например ) - и строить для него карту высот для обнаружения коллизий твоим методом и из полигонов и твоих карт компоновать общий игровой Мир !? Ну грубо говоря - синтез полигональной модели с твоей идей ! Ещё - мне кажется что твоя физическая система - имеет сходство с концепцией текселей в 3Д графике. Это тоже альтернатива полигональным моделям но которая также аппаратно поддерживается современными видеокартами. К сожалению они кушают много памяти - по этому было бы классно придумать метод пространсвенного сжатия информации о текселях (и алгоритм нахождения коллизйи - твой очень подходит для этого - только он должен работать в реальном времени) - например если они все раположены на одной плоскости - зачем их все помнить - достатончо запонить коэффициенты уровнения плоскости, а во время ренедринга - просто заполнить её текселями. )
В общем - мне кажется ты собираешь чисто тексельный движок !?

А в целом - идея интересная ! Надеюсь скоро - в движках будут использоватся не полигоны и не тексели  - а атомы ) Но для этого потребуются видяхи с квантовыми процессорами. ) И вобще - программировать движки будет незачем - потому что будет ИИ который сделает всё что ты ему прекажешь. ) Извините - замечтался....

Ещё - я думаю что ты ОЧЕНЬ правильно делаешь что не идёш стандартным путём! Конечно, обывателям - это не нравится, полигоны это круто - скажут они ) Но они это скажут не потому что это действительно круто - а потому что больше ничего кроме этого они не знают (не в обиду читающим обывателям :) ) ! Честно говоря - я хотел бы тебе чем-то помочь, как минимум какой-то идеей, и как максимум - кодингом. Люблю нестандартные вещи и решения ! :) Я подумаю - может смогу предложить тебе какие-то дополнительные усовершенстования... ;)

П.С. Могу предложить тебе идею чисто тексельно движка (рендеринг, физика частиц и анализ коллизии полностью объедены) - далой все каноны 3Д графики, но предупреждаю - она не для современных вычислительных систем (требуется очень много памяти), предположительно актуальность этой идеи возникнет через лет 10 - когда оператива будет изменрятся не гига, а тера - байтами ) К тому времени мы бы и закончили этот движок! ;) Что скажешь, заманчиво !?

#34
19:38, 4 фев. 2009

Liberty Prime
Мб воксель?

#35
19:51, 4 фев. 2009

kerosene
>Liberty Prime
>Мб воксель?

Если считать что Тексель это натянутый на 3Д плоскость текстуры Воксель - то это одно и то же :)

#36
20:03, 4 фев. 2009

Повторюсь: Если считать что Тексель это натянутый на 3Д плоскость текстуры Воксель - то это одно и то же :)

#37
23:56, 4 фев. 2009

Liberty Prime
>А почему бы не хранить Z данные для каждого полигона в отдельности (рельеф на
>полигоне) - ну там где она действительно необходима (Paralax Mapping например ) - и

Изначально алгоритм проверки столкновений делался без шейдеров, таким он остаётся и сейчас. Всё-таки Parallax в сегодняшнем виде больше подходит для хранения мелких переападов высот вроде впадин между кирпичами, а проверка столкновений CDNR - больших, влоть до лестниц между этажами.  Поэтому Parallax придётся использовать отдельно, как это сделано в демке 9.parallax (tdg2008-4-7lite), а проверку столкновений оставить в старом варианте.  Или изменять подход, чтобы лестницы рендерились из одного полигона.

Вид сверху в огромном разрешении всё-таки будет занимать меньше места, чем раскопированные текстуры для параллакса, которые затем придётся ещё и пересчитывать с учётом каждого полигона, искать ближайший к игроку полигон. Отказываться от
"фотографирования сверху" ну очень не хотелось бы, так как по скорости быстрее многих спрайтовых 2D-движков получается иллюзия 3D с некоторыми ограничениями: по координатам объекта X,Y,Z определяется 2D фотография i,j,k, с которой идёт спрайтовая 2D проверка столкновений с учётом высоты (яркости Z на 2D картинке).

>В общем - мне кажется ты собираешь чисто тексельный движок !?

Основная идея всё-таки в создании движка, в котором есть всё - от скриптов, AI и collision detection до отрисовки всего этого на экране в полигональном виде.

Проверка столкновений CDNR в принципе должна подходить к любому движку:

procedure GenerateGameObjectDepthCollisionData(...);
откуда вызывается
procedure DepthGenCall(...);
предъявляют к стороннему движку следующие требования:
1. bounding box уровня
2. возможность отрендерить уровень

При подготовке данных для Collision Detection камера устанавливается в разные точки в пределах Bounding Box процедурой BeforeRender записывая результаты в массив фотографий процедурой AfterRender:

1. DepthCollisionUseBounds(...);
задание Bounding Box

2. BeforeDepthGen;
обнуление текущего индекса фотографии

3. В цикле меняется положение камеры в пределах Bounding Box
 repeat

  4.  BeforeRender(...)
  установка камеры в нужное место

  5.  Render(...)
  рендеринг

until AfterRender(...); 
- фотографирует, а если фотографий достаточно, то выдаёт TRUE, чем
заканчивает зацикливание repeat ... until;

>П.С. Могу предложить тебе идею чисто тексельно движка (рендеринг, физика частиц и
>анализ коллизии полностью объедены) - далой все каноны 3Д графики, но предупреждаю -
>она не для современных вычислительных систем (требуется очень много памяти),
>предположительно актуальность этой идеи возникнет через лет 10 - когда оператива
>будет изменрятся не гига, а тера - байтами ) К тому времени мы бы и закончили этот
>движок! ;) Что скажешь, заманчиво !?
идей-то много бывает, было бы время и желание

#38
23:23, 7 фев. 2009

Добавлены исходники из документации на движок: http://www.igrodel.ru/tdg3d/silenthill.rar. Будет полезно тем, кто хотел бы позаимствовать метод CDNR. У кого какие вопросы - пишите e-mail , в теме указывайте "3D".

Прошло более 1 года
#39
22:02, 17 мая 2010

>http://www.tmtlib.narod.ru/skeletal.htm
>Это статья. Там в самом начале исходники скачать можно (было )
У кого это осталось сохраненное??
или может у кого другой готовый (работающий ) код есть ?

#40
0:28, 18 мая 2010

У такого метода коллизий есть ряд недостатков.) Потому что в некоторых ситуациях придется делать гораздо больше 1 снимка на 1 участок уровня. - например всякие сложные Indoor сцены. хотя насчет outdoor наверно есть некоторый резон.
И еще такой вопрос: Допустим у тебя есть персонаж по плоскости Z (по высоте) в каких точках идет просчет столкновений? Ну т.е.
1 вариант.: в 1 точке при Z=0 т.е. там где у перса ноги.
2 вариант: в 3 точках при Z=0 Z=0.5 Z=1 - ноги, пояс, голова соответственно.?

Как перс себя поведет в таком случае? и сколько там надо будет снимков Z буфера?

probn | TDG 3D Engine - движок с неполигональным collision detection и response.
#41
21:04, 18 мая 2010

Maksitron
Персу будет больно)

#42
8:09, 2 июня 2010

Maksitron
> Как перс себя поведет в таком случае? и сколько там надо будет снимков Z
> буфера?
снимков всегда ограниченное количество, и фоткаются они glReadPixel-ом только один раз для всех кубиков, из которых сотоит общий большой куб уровня. Затем по (x,y,z) персонажа высчитывается ближайший кубик и берётся его 2d-карта высот "вид сверху". Да, здесь есть некоторые ограничения.

Случай на твоей картинке иногда будет обрабатываться правильно - всё зависит от высоты выступа и размера кубиков фотографирования. Так как фото карты высот берётся с "потолка" кубика, то мы увидим следующее:
неполигональный collision detection | TDG 3D Engine - движок с неполигональным collision detection и response.
1 - это высота фотографирования, 2 - это уровень карты высот до входа в выступ. При подходе персонажа из области 2 в область 1 он просто не сможет туда попасть, так как присутствует слишком большой перепад высоты Y2-Y1:
пояснения к неполигональной проверке столкновений в 3d | TDG 3D Engine - движок с неполигональным collision detection и response..

Ну и наконец самое главное: по кубикам с картами высот я достаточно полно восстанавливал трёхмерную модель уровня. Единственное, что невозможно было восстановить - так это абсолютно вертикальные полигоны, которые попросту не фотографировались при виде сверху. Поэтому если в уровне присутсвует тонкая стена без прослойки из пустоты, уходящей на другую глубину, то персонаж будет проходить сквозь такую стену.

Я подумывал и над более полной реализацией:  делать срезы уровней сначала с режимом CULL_FACE передних граней полигонов, затем задних. Таким образом получаются фото передних и задних поверхностей полигона, что даёт однозначность в положении невидимых пустот, ограниченных полигонами стен и т.п. Можно по-другому фотографировать кубики, либо вводить проекцию с искажением, выводящюю вертикальные стены в горизонтальную плоскость (видимую камере). В одной из предыдущих версий бралось две точки: одна в ногах, одна на уровне головы. Но так как в предыдущем простом варианте тоже всё работало, далее эту идею не прорабатывал.

#43
9:44, 19 авг. 2010

По просьбе Subject выкладываю самую свежую версию (нешейдерная):
TDG 3D ENGINE 9.24 (скелетная+лицевая анимация HL2) на Delphi

#44
14:52, 19 авг. 2010

спасибо)

Страницы: 1 2 3 4 Следующая »
ПроектыФорумУтилиты

Тема в архиве.