Разработка и ромхакинг > Разработка игр
Что такое коллизия и как проверять столкновения объектов?
(1/1)
Segaman:
Народ, разъясните пож., что такое коллизия и как вообще можно проверять столкновеня обьектов?
r57shell:
омг, нуб детектед.
Коллизия есть пересечение.
Обычно пересечение и есть столкновение.
Термин коллизия используют в:
1) Играх когда говорят о столкновениях
2) В криптографии когда например говорят о хэшах.
3) В интернете коллизии возникают когда одновременно пытаются в обоих направлениях передать данные...
4) другое...
А теперь: "как вообще можно проверять столкновения объектов?"
Collision Detection тебе поможет (спасиба кэп)
Задача найти пересечение двух объектов сводится к примитивным задачам, типа
1) пересечь прямую с прямой/отрезком
2) пересечь треугольник с прямой/отрезком
3) пересечь треугольник с точкой (ужасно сложно  :lol:)
4) пересечь треугольник с треугольником.
Используемые при потребности максимальных точностей
5) прямая с окружностью
6) окружность с окружностью
7) окружность с треугольником
8) чего в голову взбредёт.
короче другими словами, считаешь какие есть у тебя объекты, а потом уже эти фишки реализовываешь.
После чего остаётся заюзать какое-нибудь пространственное дерево, чтобы ускорить нахождение пересечений, и всё.
Ито они не всегда нужны.
Mr2:
А как быть с 3D объектами? Каждый полигон сканировать на пересечение с чем либо? o_0
r57shell:
нуб 2 детектед.
А треугольники бывают только 2D?) А полигон, не объединение треугольников?)
Ответ: да сканировать, не все конечно... но именно пересечение с треугольниками. Если конечно у тебя объект из треугольников.
"не все конечно" - для этого и есть "пространственное дерево". За такое название не пинать, просто их дофига, BSP, AABB... а как их вместе называют не знаю.
Поидее BSP = Binary Space Partitioning - бинарное разделение пространства. Может "деревья разделения пространства"?))) слишком много букаф.

Добавлено позже:
Вместо "BSP-подобных текник", если очень лень, можно использовать только Bound-Box'ы.
Mr2:

--- Цитата: r57shell от 03 Апрель 2011, 01:01:05 ---Ответ: да сканировать, не все конечно...
--- Конец цитаты ---
А какие сканировать. Допустим катится у меня шарик и надо зафиксировать столкновение со стеной?Придётся сканировать все полигоны шарика? o_0
r57shell:
Ну вопервых раз у тебя шарик, то умные люди сразу проверяют пересечение шарика с чем-то.
А так, да... если у тебя отвёртка катится, то какие-то её треугольники проверять...
Яже вроде уже писал. фигли снова спрашивать. Если не укладывается в твои представления, то это не означает, что делают не так. Погугли Collision Detection и BSP-tree, AABB.
Я не собираюсь подробно описывать то, что уже всеми подробно описано :).

Добавлено позже:
например:
http://ru.wikipedia.org/wiki/%D0%94%D0%B2%D0%BE%D0%B8%D1%87%D0%BD%D0%BE%D0%B5_%D1%80%D0%B0%D0%B7%D0%B1%D0%B8%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BF%D1%80%D0%BE%D1%81%D1%82%D1%80%D0%B0%D0%BD%D1%81%D1%82%D0%B2%D0%B0
http://www.gamedev.ru/articles/?id=30128
Mr2:

--- Цитата: r57shell от 03 Апрель 2011, 12:36:10 ---фигли снова спрашивать.

--- Конец цитаты ---
Не удержался. :lol:

Мне ещё до колизий далеко, я так и непонял как линии рисовать. Там какие то формулы(Алгоритм Брезенхэма) ядрёные.... Рисовать то рисует, а как и почему не понял :-\.Вобщем спасибо за внимание. ;)
AjaxVS:
да никто никогда треугольники не сравнивает. это нереально по производительности.
сравниваются ограничивающие объемы. обычно рассчитывают прямоугольный параллелепипед, в который помещается вся модель, проверяется пересечение такого кубика со всеми остальными, которые рядом находятся. потом, если надо, проверяется пересечение с другими, более мелкими кубиками, в которые помещаются части моделей (рука, голова, etc). алгоритмы легко ищутся, как подсказал r57shell.


--- Цитата ---Там какие то формулы(Алгоритм Брезенхэма) ядрёные
--- Конец цитаты ---
а ты думал, мы тут пестики в тычинки пихаем? :D копай, учись.. если хочешь.
Mr2:

--- Цитата: AjaxVS от 03 Апрель 2011, 18:38:11 ---да никто никогда треугольники не сравнивает. это нереально по производительности.
--- Конец цитаты ---
То то я и думаю:"Где то тут подвох".  :D
Пока весь шар просканируешь, стены рухнут. ;)

--- Цитата: AjaxVS от 03 Апрель 2011, 18:38:11 ---а ты думал, мы тут пестики в тычинки пихаем? :D копай, учись.. если хочешь.

--- Конец цитаты ---
Низнаю что вы там втыкаете, я точно не втыкаю. :lol:

--- Цитата: AjaxVS от 03 Апрель 2011, 18:38:11 ---копай, учись.. если хочешь.

--- Конец цитаты ---
"Пилите, пилите Шура - они золотые"... :lol:
r57shell:

--- Цитата: AjaxVS от 03 Апрель 2011, 18:38:11 ---да никто никогда треугольники не сравнивает. это нереально по производительности.

--- Конец цитаты ---
Нуб 3 детектед.
Не вешай людям на уши...
Примеры:
1) попадание пуль в Counter Strike/Call of Duty .... короче в FPS играх. (заметь, точки от пуль остаются в точном их попадании...)
2) Выделения объектов тоже бывают такими, пример сходу не скажу.
3) В нормальной физике типа Half-Life 2 без этого не обойтись (например гравипушкой когда играешься, предмет может зацепится любой вершиной...)
4) ходьба по поверхностям. в FPS играх.
5) если подумать можно ещё тонны перечислить.
Не спорю что бывает прибигают к апроксимации моделей для физики. (строится дополнительный мэш, представляющий упрошенную модель, для физики).
На счёт скорости - достигается логарифмичная сложность.
На примере логарифм от 1000000 = 20.
Mr2:

--- Цитата: r57shell от 03 Апрель 2011, 20:21:06 ---1) попадание пуль в Counter Strike/Call of Duty .... короче в FPS играх. (заметь, точки от пуль остаются в точном их попадании...)

--- Конец цитаты ---
Ты видел исходники Counter Strike/Call of Duty/Half-Life 2? :?
pedro:

--- Цитата: Mr2 от 03 Апрель 2011, 22:00:57 ---Ты видел исходники Counter Strike/Call of Duty/Half-Life 2? :?


--- Конец цитаты ---
со стима скачать можно-)
r57shell:
Mr2, нет. Ещё туда добавь Quake3.
AjaxVS:

--- Цитата ---1) ... точки от пуль остаются в точном их попадании
--- Конец цитаты ---
пересечение луча с OOBB.
вот у меня даже функция есть:

--- Цитата ---DWORD CajGamePhys::CheckCrossLine(DWORD wOI, bool isBullet, D3DXVECTOR3 * vRayStart,D3DXVECTOR3 * vRayEnd, D3DXVECTOR3 * vHit = NULL, DWORD iIgnoreET = 0, DWORD iIgnoreWOI = 0, DWORD iStart = 0) {
...
}
--- Конец цитаты ---
угадай, что возвращает вектор vHit.
пересечение с треугольниками не используется.


--- Цитата ---2) Выделения объектов тоже бывают такими, пример сходу не скажу.
--- Конец цитаты ---
получение проекции и выборка из дерева.
пересечение с треугольниками не используется.


--- Цитата ---3) В нормальной физике типа Half-Life 2 без этого не обойтись (например гравипушкой когда играешься, предмет может зацепится любой вершиной...)
--- Конец цитаты ---
про Half-Life2 ничего не знаю, догадываться не буду.


--- Цитата ---4) ходьба по поверхностям. в FPS играх.
--- Конец цитаты ---
хейтмапы.
пересечение с треугольниками не используется.


--- Цитата ---Не спорю что бывает прибигают к апроксимации моделей для физики. (строится дополнительный мэш, представляющий упрошенную модель, для физики).
--- Конец цитаты ---
причем здесь прогрессивные меши? на генератор научных статей похоже, это тут совсем не в тему.
пересечение с треугольниками не используется.

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

зы. чтобы не быть голословным - пример с ландшафтом:

никаких пересечений с треугольниками.
Mr2:

--- Цитата: r57shell от 03 Апрель 2011, 22:43:19 ---Mr2, нет.

--- Конец цитаты ---
:lol:
NOOB №1 детектед!
Ты слышал какое Г играет биталз?  :lol:
r57shell:

--- Цитата: AjaxVS от 03 Апрель 2011, 23:50:50 ---пересечение луча с OOBB.

--- Конец цитаты ---
Видимо у вас объекты box-овидного вида. в сферу стрельни таким методом.


--- Цитата: AjaxVS от 03 Апрель 2011, 23:50:50 ---получение проекции и выборка из дерева.

--- Конец цитаты ---
Тут нет конкретики, так-что не могу спорить.


--- Цитата: AjaxVS от 03 Апрель 2011, 23:50:50 ---хейтмапы.

--- Конец цитаты ---
Как давно ты видел игры в которых всего один этаж?


--- Цитата: AjaxVS от 03 Апрель 2011, 23:50:50 ---причем здесь прогрессивные меши?
--- Конец цитаты ---
Да так, за красивое название.


--- Цитата: AjaxVS от 03 Апрель 2011, 23:50:50 ---продолжай троллить нас дальше, дорогой товарищ :)

--- Конец цитаты ---
продолжай оставаться нубом.


--- Цитата: AjaxVS от 03 Апрель 2011, 23:50:50 ---я, правда, в топик заходить больше не буду - мне с вами все ясно.

--- Конец цитаты ---
Это твой выбор.


--- Цитата: AjaxVS от 03 Апрель 2011, 23:50:50 ---зы. чтобы не быть голословным - пример с ландшафтом:

--- Конец цитаты ---
Одноэтажный ландшафт.
Как ты припухнешь на картах типа Half-Life где этажи
1) не на одном уровне.
2) их дофига.
а ещё круче пример Painkiller


--- Цитата: AjaxVS от 03 Апрель 2011, 23:50:50 ---никаких пересечений с треугольниками.

--- Конец цитаты ---
"Полностью с вами согласен."

Добавлено позже:
http://www.devmaster.net/articles/bsp-trees-physics/
картинки Figure 10, 11 и прочие, так, для извращенцев просто да?)
И код написан тоже just for lulz.
Segaman:
Мне над самое простое. Это проверять столкновения объектов перед их движением. т.е. перед тем как переместится, проверять столкновение с одним или там другим обьектом. Тупо квадраты проверять разных размеров. Так вот объясните на пальцах все мои действия. Буду крайне благодарен. Ато доки панимать не выходит. Слишком нудно. И я не нуб. Сам такой. Я б не стал спрашивать, не будь такой нужды. А я игру начал писать, а таких встроеных, как в гм, функций в сеге нед. Просто обьясни, если знаешь, понятным языком. Ато чот моск мой не хочет додумывать.
r57shell:

--- Цитата: Segaman от 04 Апрель 2011, 20:03:22 ---Ато чот моск мой не хочет додумывать.

--- Конец цитаты ---
Не хочет значит не надо.
Segaman:
Спасибо, большое. Очень помог, сам бы долго моск бы ломал. Ато в армии не всегда моск пашет на всю катушку. Не знаю даж. Как отблагодарить.
Навигация
Главная страница сообщений

Перейти к полной версии