Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Игры";
Текущий архив: 2005.11.06;
Скачать: [xml.tar.bz2];

Вниз

Collision check -> Sphere vs World -> Реализация   Найти похожие ветки 

 
Кефир87   (2005-06-10 00:37) [0]

Я пораскинул мОзгами и понял что этот метод проверки столкновений действительно очень удобен. Но вот когда дело дошло до реализации я потерялся... Вот у меня структура мира такая... Условно говоря мир состоит из фейсов заданных 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 - текущая сфера...
Вот тут то я и теряюсь... Все понимаю а сказать не могу...
Если сравнивать расстояние от вершин до центра сферы с радиусом то если вершины расположенны далеко друг от друга сфера свободно продет сквозь фейс...

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

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


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

"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 ] откуда можно понять суть алгоритма


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

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


 
Zer0 ©   (2005-06-10 01:05) [3]

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

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


 
XProger ©   (2005-06-10 01:24) [4]

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

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


 
Darthman ©   (2005-06-10 13:04) [5]

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


 
grouzd[E]v ©   (2005-06-10 13:07) [6]

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


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


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

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


 
XProger ©   (2005-06-10 15:30) [8]

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


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

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

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

Следует это:

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

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

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


 
ViK ©   (2005-06-21 23:34) [10]

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



Страницы: 1 вся ветка

Форум: "Игры";
Текущий архив: 2005.11.06;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.059 c
14-1129681740
TButton
2005-10-19 04:29
2005.11.06
Лицензирование софта


1-1129547467
Хрюндель
2005-10-17 15:11
2005.11.06
Как передать в функцию как аргумент - тоже фукцию?


1-1129182769
Andruid
2005-10-13 09:52
2005.11.06
Алгоритм простейшего элемента нейросетей - компаратора


3-1127324773
Константин2
2005-09-21 21:46
2005.11.06
Хранимая процедура


2-1129059115
Кабан
2005-10-11 23:31
2005.11.06
Промогите разобраться ServerSocket1 и ClientSocket1





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