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

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

Collision check -> Sphere vs World -> Реализация [Delphi, OpenGL, Windows]


Кефир87 ©   (2005-06-10 00:37:00) 

Я пораскинул мОзгами и понял что этот метод проверки столкновений действительно очень удобен. Но вот когда дело дошло до реализации я потерялся... Вот у меня структура мира такая... Условно говоря мир состоит из фейсов заданных 4мя координатами (прямоугольник), нормалью (для освещения и для СС) и еще кое что есть что не важно... Например:


Vector = record
 nx,ny,nz:glfloat;
end;

Coord = record
 x,y,z:glfloat;
end;

Face = record
 c1     : Coord;
 c2     : Coord;
 c3     : Coord;
 c4     : Coord;
 normal : Vector;
end;

Sphere = record
 pos : Coord;
 rad : GlFloat;
end;


Ну и собственно сфера задана позицией PGLFloat и радиусом...
В подробности организайии цикла не вникаем... Там у меня списки сфер и фейсов... Для каждой сферы нужно проверять столкновения (условно говоря) для всех фесов...
Сама проверка...
w : Face- текущий фейс
s : Sphere- текущая сфера...
Вот тут то я и теряюсь... Все понимаю а сказать не могу...
Если сравнивать расстояние от вершин до центра сферы с радиусом то если вершины расположенны далеко друг от друга сфера свободно продет сквозь фейс...

Надеюсь вопрос ясен...

Код что я привел условный... Все гораздо сложнее. Но это для примера...


ViK   (2005-06-21 23:34:00) [1]

Посмотри здесь
http://gdlinks.hut.ru/cdfaq/
очень хорошая статья про столкновение всего со всем, в том числе и про сферу с плоскостью.


Кефир87   (2005-06-21 22:52:00) [2]

Помоему из этого:

> Плоскость строится по 3 точкам! А 4 точки не всегда в одной
> плоскости лежат...

Следует это:

> Кривые нормали

Я это прекрасно понимаю. Но стену-то удобнее описать (именно описать) четырехугольником...

Я тут сделал некое убогое подобие проверки столкновений для стен которые лежат только вдоль какой-либо из осей координат... Дальше париться не захотелось. Потом как-нибудь.


XProger   (2005-06-10 15:30:00) [3]

Проклинал когда конвертировал модели уровней созданные в 3ds MAX в свои 4-угольники.
1) Кривые нормали (т.е. там в конверторе приходилось ставить кучу условий)
2) Плоскость строится по 3 точкам! А 4 точки не всегда в одной плоскости лежат...


Кефир87   (2005-06-10 14:41:00) [4]


> Сам себя проклинал за то что выбрал четырёхуголные полигоны
> :)

А я вот не понимаю почему? У меня на самом деле фейсы рисуются 4мя, двуми треугольниками или одним квадом в зависимости от оддаленности... Но я думаю дело в освещении?


grouzd[E]v   (2005-06-10 13:07:00) [5]

TO Darth : Да я знаю, что просто, я это сделал, а теперь пробую столкнуть  сферу с полигоном


Darthman   (2005-06-10 13:04:00) [6]

Сфера со сферой это ж просто :) расстояние меньше суммы радиусов. Сам делал. Никаких проблем не втретил.


XProger   (2005-06-10 01:24:00) [7]

Кефир87, как-то делал в своё время в XEngine. Сам себя проклинал за то что выбрал четырёхуголные полигоны :)
http://XProger.narod.ru/XEngine_Source.rar- исходник
http://XProger.narod.ru/Files/XEngine_v0.15.rar- сама игра

Сам исходный код большей части математики был скомунизден с одного С++ примерчика :)


Zer0   (2005-06-10 01:05:00) [8]

совсем забыл! фунцыя называетсо SphereTriangleIntersectionTest.

зы в этом файлике есть много полезных алгоритмов.


grouzd[E]v   (2005-06-10 00:59:00) [9]

Уфф.. Сам начал коллизии писать, причем также, но у меня проще - сферы со сферами (пока), а так советую посмотреть урок от NeHe. А вообще-то здесь нужна стереометрия, а мы ее только начали =((


Zer0   (2005-06-10 00:58:00) [10]

"3D Object Intersection
This page gives a grid of intersection routines for various popular objects, pointing to resources in books and on the web."
[ http://www.realtimerendering.com/int/]
код на сях [ http://www.acm.org/jgt/papers/KarabassiEtAl99/collision.html] откуда можно понять суть алгоритма


Наверх

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