Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > C++

Ответ
 
Опции темы
Старый 05.09.2011, 22:24   #1
Mind
ПроЭктировщик
 
Аватар для Mind
 
Регистрация: 24.02.2011
Сообщений: 188
Написано 13 полезных сообщений
(для 18 пользователей)
Столкновение с боксом

Получилось определить столкновение с боксом но не пойму как сделать реальное скольжение по его сторонам
ЗЫ раньше делал столкновение со сферой там куда проше(с помощью синуса и косинуса по трём осям), а как с боксом быть незнаю
(Offline)
 
Ответить с цитированием
Старый 05.09.2011, 22:54   #2
dsd
Мастер
 
Аватар для dsd
 
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений
(для 1,836 пользователей)
Ответ: Столкновение с боксом

Если правильно понял:

У тебя есть вектор скорости. есть точка столкновения. есть нормаль поверхности с которой произошел контакт.

Проецируешь на нормаль вектор скорости. вычитаешь из вектора скорости вектор нормали умноженный на длину проекции. Это будет остаток скорости вдоль поверхности с которой произошло столкновение.
(Offline)
 
Ответить с цитированием
Старый 05.09.2011, 23:01   #3
Mind
ПроЭктировщик
 
Аватар для Mind
 
Регистрация: 24.02.2011
Сообщений: 188
Написано 13 полезных сообщений
(для 18 пользователей)
Ответ: Столкновение с боксом

В принципе понятно только вот мне пришло вголову что то намного полегче:
1) Чтобы была нормаль нужно описать прямоугольник 6-ю вершинами...ИМХО где-то читал что хватает и две вершины знать чтобы определить столкновение(максимальную и минимальную).
2) я собсно с помощью двух вершин и опредиляю столкновение...
3)оказалось все просто:просто надо определить к какой стороне ближе точка и двигать в сторону нормали этой точку(опять же нормали писать не надо ет я так к слову)...
4)А с поворотом просто считать син и кос максимальной или минимальной точки к центру бокса чтобы двигать точку от бокса относительно локальных координат...
Где-то так
(Offline)
 
Ответить с цитированием
Старый 05.09.2011, 23:09   #4
dsd
Мастер
 
Аватар для dsd
 
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений
(для 1,836 пользователей)
Ответ: Столкновение с боксом

нормаль(x1,y1,z1);
скорость(x2,y2,z2);
проекция скорости на нормаль:
l=(x1*x2+y1*y2+z1*z2)/sqrt(x1*x1+y1*y1+z1*z1)
остаток скорости(x2-x1*l;y2-y1*l;z2-z1*l). Как-то так. мог с направлением вектора остатка скорости ошибится
(Offline)
 
Ответить с цитированием
Старый 06.09.2011, 16:53   #5
dsd
Мастер
 
Аватар для dsd
 
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений
(для 1,836 пользователей)
Ответ: Столкновение с боксом

Сообщение от Mind Посмотреть сообщение
В принципе понятно только вот мне пришло вголову что то намного полегче:
1) Чтобы была нормаль нужно описать прямоугольник 6-ю вершинами...ИМХО где-то читал что хватает и две вершины знать чтобы определить столкновение(максимальную и минимальную).
2) я собсно с помощью двух вершин и опредиляю столкновение...
плоскость a*x+b*y+c*y+d=0
нормаль этой плоскости (a,b,c). Кстати как прямоугольник вроде имеющий всего 4(четыре) угла описать шестью точками?O_o Що за вуду?
(Offline)
 
Ответить с цитированием
Старый 10.09.2011, 15:07   #6
Mind
ПроЭктировщик
 
Аватар для Mind
 
Регистрация: 24.02.2011
Сообщений: 188
Написано 13 полезных сообщений
(для 18 пользователей)
Ответ: Столкновение с боксом

Как можно определить столкновение с повернутым (ну например по оси Y) боксом?
Был вариант преобразовать координаты камеры в объекта чтобы потом:
Если камера.х<объект.х то столкновение
Но не пойму как преобразовать?

Или есть другие способы определения столкновения с повёрнутым объектом?
(Offline)
 
Ответить с цитированием
Старый 10.09.2011, 16:10   #7
dsd
Мастер
 
Аватар для dsd
 
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений
(для 1,836 пользователей)
Ответ: Столкновение с боксом

правильный способ выучить до понимания це: http://compgraph.tpu.ru/3d.htm

Не правильный, но легкий для восприятия способ это три раза повернуть вокруг осей каждый раз умножая на соответсвующий масштаб вдоль соответствующей оси. Т.е. исходный икс*масштаб по икс=Х в формуле.

Хнов=Х*кос(угла)+У*син(угла вокруг зед)
Унов=-Х*син(угла вокруг зед)+У*косинус(угол вокруг зед)

Ну а смещение потом просто добавляешь к коодинате каждой точки.
И чую я, что это вольный пересказ того что в ссылке. Сильно порядок косинусов в моей формуле похож на порядок в матрице поворота, однака.
(Offline)
 
Ответить с цитированием
Старый 10.09.2011, 16:56   #8
dsd
Мастер
 
Аватар для dsd
 
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений
(для 1,836 пользователей)
Ответ: Столкновение с боксом


Плоскость берешь от бокса, от модели выбираешь самые "широкие" пары точек и проверяешь с одной стороны плоскости эти точки или нет, если по разные, то пересеклись, если одна из точек лежит в плоскости то коснулись
Если есть пересечение то уже можно подробней смотреть где конкретно для всех точек модели проверяя.

Ну и можно сначала по радиусам узнать, рядом вообще бокс и модель или нет.
(Offline)
 
Ответить с цитированием
Старый 10.09.2011, 17:02   #9
Mind
ПроЭктировщик
 
Аватар для Mind
 
Регистрация: 24.02.2011
Сообщений: 188
Написано 13 полезных сообщений
(для 18 пользователей)
Ответ: Столкновение с боксом

Блин все что выше я знаю ну кроме матриц их не сильно, но хотя чуть лучше чем с начала! Поворот каждой точки делаю легко вот токо как проверку сделать столкновения?
Приведу пример:
......................Y......................
......................|......................
......................|......................
......................|......................
......................|......................
......................|......................
____________________________X
......................|......................
......................|......................
A___________________________B
......................|......................
......................|......................


Есть отрезок AB. Столкновение здесь определяю я так:
if (camera.y>AB.y) {coll=1;}
if (coll==1) {TranslateEntity(camera.y,0,-1,0)};

А если отрезок не прямой как определить столк.. а?

......................Y......................
......................|......................
......................|......................
......................|......................
......................|......................
......................|......................
_____________________________X
......................|......................
......................|......................
......................|...B..................
......................|../...................
......................|./....................
......................./.....................
....................../......................
...................../|......................
..................A/.|......................
......................|......................
(Offline)
 
Ответить с цитированием
Старый 10.09.2011, 17:31   #10
dsd
Мастер
 
Аватар для dsd
 
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений
(для 1,836 пользователей)
Ответ: Столкновение с боксом

Открой чтоли аналитическую геометрию на плоскости или в пространстве и выбери способ по вкусу.
(Offline)
 
Ответить с цитированием
Старый 10.09.2011, 17:54   #11
Mind
ПроЭктировщик
 
Аватар для Mind
 
Регистрация: 24.02.2011
Сообщений: 188
Написано 13 полезных сообщений
(для 18 пользователей)
Ответ: Столкновение с боксом

Я скорее сам додумаюсь с помощью эксперементов чем буду искать что-то.
ЗЫ тем более у меня уже что-то есть на уме щас буду експерементировать..
(Offline)
 
Ответить с цитированием
Старый 10.09.2011, 18:09   #12
dsd
Мастер
 
Аватар для dsd
 
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений
(для 1,836 пользователей)
Ответ: Столкновение с боксом

Видимо у тебя повышенный уровень мидихлориан
(Offline)
 
Ответить с цитированием
Старый 10.09.2011, 18:14   #13
Mind
ПроЭктировщик
 
Аватар для Mind
 
Регистрация: 24.02.2011
Сообщений: 188
Написано 13 полезных сообщений
(для 18 пользователей)
Ответ: Столкновение с боксом

походу
(Offline)
 
Ответить с цитированием
Старый 10.09.2011, 18:45   #14
Mind
ПроЭктировщик
 
Аватар для Mind
 
Регистрация: 24.02.2011
Сообщений: 188
Написано 13 полезных сообщений
(для 18 пользователей)
Ответ: Столкновение с боксом

Как можно повернуть систему координат камеры, чтобы не мучаться с кос и син углов для опр. столкновения с кривой?
Я хочу чтобы когда объект повёрнут на @град. то камеру тоже повернуть на стоко же и опредилять от неё:

if (camera.y>AB.y) {coll=1;}
if (coll==1) {TranslateEntity(camera.y,0,-1,0)};
А потом вернут назад сиситему координат.
PS. Что значит команда D3DXVec3TransformCoord()?
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 15:27.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com