Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Игры";
Текущий архив: 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
9-1139750452
cava
2006-02-12 16:20
2006.12.10
Спрайты


2-1163850359
Виталик 2006
2006-11-18 14:45
2006.12.10
Не присваиваются значения!


6-1153716134
Kacnep
2006-07-24 08:42
2006.12.10
Indy предварительная проверка на разрешенные IP для подключения


15-1164213822
Сэм
2006-11-22 19:43
2006.12.10
DDR 1024Mb PC 3200 SAMSUNG


3-1160038014
Lex_!
2006-10-05 12:46
2006.12.10
Вычисляемые поля при динамическом формировании колумов





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский