Форум: "Игры";
Текущий архив: 2006.12.10;
Скачать: [xml.tar.bz2];
ВнизCollision Detection II. Найти похожие ветки
← →
VolanD666 (2006-02-09 13:53) [0]Привет, gamedev"еры! Вот уже неделю пытаюсь создать Collision Detection. С одни треугольником все получается гладко. А как быть с группой. Я предполагаю такой алгоритм:
1) Идем по списку треугольников, выбираем текущий.
2) Если произошло столкновение с текущим, то находим смещение. Тогда CameraPos=NewPos+Offset? ( Спрашиваю, так как в некоторых исходниках не так )
3) "Загоняем NewPos+Offset" в эту же функцию ( получается рекурсия ).
4) Пройдя по всему списку, если столкновений не происходило, то CameraPos=NewPos ( без смещения ).
Но вот только я смотрел несколько исходников и некоторые пункты просто пропущены. А мне кажется, что они все нужны. Это так?
← →
XProger © (2006-02-09 14:34) [1]В большинстве случаев, одного прохода по списку бывает достаточно...
← →
VolanD666 (2006-02-09 15:20) [2]А вот интересно, почему в XSource не проверяется столкновение при скольжении. Или я что-то просмотрел?
Pos := V_Add(Pos, offset);
Да, и почему Pos, а не NewPos( куда хотим встать )?
← →
XProger © (2006-02-09 15:25) [3]VolanD666, что значит хотим? Мы не хотим, мы там должны находиться т.к. прохождение сквозь "стены" запрещено. Другое дело, если игрок попытается пролезть между двумя плоскостями расположенных под острым углом по отношению друг к другу, тогда будет колбасить...
Но любую задачу нужно решать под конкретный случай, а не на все что могут быть. У меня таких случаев - нет :)
← →
VolanD666 (2006-02-09 16:02) [4]Понятно :)
← →
VolanD666 (2006-02-10 17:55) [5]А вот еще несколько вопросов появилось:
1) Расстояние до плоскости нужно находить от точки «новой потенциальной позиции» или текущей позиции?
2) При столкновении со стеной начинает моргать экран, так как изменяется коэффициент скорости, зависящий от FPS. В этом случае отталкивать от стены без учета этого коэффициента?
3) Если мы сталкиваемся сразу с двумя треугольниками, то смещение будет равно сумме смещений от каждого треугольника?
← →
XProger © (2006-02-10 18:18) [6]VolanD666,
1) позиция одна всегда, но после проверки столкновений она изменяется на Offset
2) Это одна из многих проблем связанных с использованием DeltaTime, к её решению подходи творчески ;)
3) цикл по всем треугольникам - если сталкиваемся с треугольником, то меняем позицию на Offset
Следовательно - сумме :)
← →
VolanD666 (2006-02-10 18:38) [7]
> 1) позиция одна всегда, но после проверки столкновений она
> изменяется на Offset
Я имею ввиду точку где мы стояли и точку, в которую мы переместимся в случае если CD даст отрицательный результат :)
← →
XProger © (2006-02-10 19:15) [8]VolanD666, дык CD не должен ничего давать! Он должен корректировать позицию :) Но это уже частный случай (как в моих проектах)...
← →
VolanD666 (2006-02-10 19:23) [9]
> Он должен корректировать позицию
Ну, тогда точку в которую станет игрок ( без смещения ) :о
← →
XProger © (2006-02-10 19:29) [10]VolanD666, вообще для DeltaTime необходимо трассировать отрезок с предыдущей позиции до текущей, на предмет пересечения с полигонами сцены, раз уж на то пошло... :)
← →
VolanD666 (2006-02-11 08:28) [11]
> 2) При столкновении со стеной начинает моргать экран, так
> как изменяется коэффициент скорости, зависящий от FPS. В
> этом случае отталкивать от стены без учета этого коэффициента?
>
Странная вещь, убрал SpeedFactor, но из–за того что колеблется последняя цифра смещения моргает стена :(
Что делать?
← →
XProger © (2006-02-11 13:17) [12]VolanD666, понять как оно работает
← →
VolanD666 (2006-02-11 17:39) [13]Ну, я вроде понял, как это все работает. Даже сделал столкновение с одним треугольником. Вот только внедрить к себе это все не могу, все время появляются какие-нибудь «косяки» :(
Хорошо было бы получить пример, где бы учитывалось все, что мне надо…
← →
XProger © (2006-02-11 18:34) [14]VolanD666, ну раз понимаешь как оно работает - какие ещё баги могут быть? Не ленись ;)
← →
VolanD666 (2006-02-11 20:34) [15]Спасибо, за совет :)
Страницы: 1 вся ветка
Форум: "Игры";
Текущий архив: 2006.12.10;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.047 c