![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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] откуда можно понять суть алгоритма