Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Collision Detection II. [VC, Windows]


VolanD666 ©   (2006-02-09 13:53:00) 

Привет, gamedev'еры! Вот уже неделю пытаюсь создать Collision Detection. С одни треугольником все получается гладко. А как быть с группой. Я предполагаю такой алгоритм:

1) Идем по списку треугольников, выбираем текущий.
2) Если произошло столкновение с текущим, то находим смещение. Тогда CameraPos=NewPos+Offset?( Спрашиваю, так как в некоторых исходниках не так )
3) "Загоняем NewPos+Offset" в эту же функцию ( получается рекурсия ).
4) Пройдя по всему списку, если столкновений не происходило, то CameraPos=NewPos ( без смещения ).

Но вот только я смотрел несколько исходников и некоторые пункты просто пропущены. А мне кажется, что они все нужны. Это так?


VolanD666   (2006-02-11 20:34:00) [1]

Спасибо, за совет :)


XProger   (2006-02-11 18:34:00) [2]

VolanD666, ну раз понимаешь как оно работает - какие ещё баги могут быть? Не ленись ;)


VolanD666   (2006-02-11 17:39:00) [3]

Ну,  я вроде понял, как это все работает. Даже сделал столкновение с одним треугольником. Вот только внедрить  к себе это все не могу, все время появляются какие-нибудь «косяки» :(
Хорошо было бы получить пример, где бы учитывалось все, что мне надо…


XProger   (2006-02-11 13:17:00) [4]

VolanD666, понять как оно работает


VolanD666   (2006-02-11 08:28:00) [5]


> 2) При столкновении со стеной начинает моргать экран, так
> как изменяется коэффициент скорости, зависящий от FPS. В
> этом случае отталкивать от стены без учета этого коэффициента?
>

Странная вещь, убрал SpeedFactor, но из–за того что колеблется последняя цифра смещения моргает стена :(
Что делать?


XProger   (2006-02-10 19:29:00) [6]

VolanD666, вообще для DeltaTime необходимо трассировать отрезок с предыдущей позиции до текущей, на предмет пересечения с полигонами сцены, раз уж на то пошло... :)


VolanD666   (2006-02-10 19:23:00) [7]


> Он должен корректировать позицию


Ну, тогда точку в которую станет игрок ( без смещения ) :о


XProger   (2006-02-10 19:15:00) [8]

VolanD666, дык CD не должен ничего давать! Он должен корректировать позицию :) Но это уже частный случай (как в моих проектах)...


VolanD666   (2006-02-10 18:38:00) [9]


> 1) позиция одна всегда, но после проверки столкновений она
> изменяется на Offset


Я имею ввиду точку где мы стояли и точку, в которую мы переместимся в случае если CD даст отрицательный результат :)


XProger   (2006-02-10 18:18:00) [10]

VolanD666,
1) позиция одна всегда, но после проверки столкновений она изменяется на Offset
2) Это одна из многих проблем связанных с использованием DeltaTime, к её решению подходи творчески ;)
3) цикл по всем треугольникам - если сталкиваемся с треугольником, то меняем позицию на Offset
Следовательно - сумме :)


VolanD666   (2006-02-10 17:55:00) [11]

А вот еще несколько вопросов появилось:
1) Расстояние до плоскости нужно находить от точки «новой потенциальной позиции» или текущей позиции?
2) При столкновении со стеной начинает моргать экран, так как изменяется коэффициент скорости, зависящий от FPS. В этом случае отталкивать от стены без учета этого коэффициента?
3) Если мы сталкиваемся сразу с двумя треугольниками, то смещение будет равно сумме смещений от каждого треугольника?


VolanD666   (2006-02-09 16:02:00) [12]

Понятно :)


XProger   (2006-02-09 15:25:00) [13]

VolanD666, что значит хотим? Мы не хотим, мы там должны находиться т.к. прохождение сквозь "стены" запрещено. Другое дело, если игрок попытается пролезть между двумя плоскостями расположенных под острым углом по отношению друг к другу, тогда будет колбасить...
Но любую задачу нужно решать под конкретный случай, а не на все что могут быть. У меня таких случаев - нет :)


VolanD666   (2006-02-09 15:20:00) [14]

А вот интересно, почему в XSource не проверяется столкновение при скольжении. Или я что-то просмотрел?

Pos := V_Add(Pos, offset);

Да, и почему Pos, а не NewPos( куда хотим встать )?


XProger   (2006-02-09 14:34:00) [15]

В большинстве случаев, одного прохода по списку бывает достаточно...


Наверх

Титульная страница Поиск, карта сайта Написать письмо