Столкновение с боксом
Получилось определить столкновение с боксом но не пойму как сделать реальное скольжение по его сторонам :4to:
ЗЫ раньше делал столкновение со сферой там куда проше(с помощью синуса и косинуса по трём осям), а как с боксом быть незнаю :dontknow: |
Ответ: Столкновение с боксом
Если правильно понял:
У тебя есть вектор скорости. есть точка столкновения. есть нормаль поверхности с которой произошел контакт. Проецируешь на нормаль вектор скорости. вычитаешь из вектора скорости вектор нормали умноженный на длину проекции. Это будет остаток скорости вдоль поверхности с которой произошло столкновение. |
Ответ: Столкновение с боксом
В принципе понятно только вот мне пришло вголову что то намного полегче:
1) Чтобы была нормаль нужно описать прямоугольник 6-ю вершинами...ИМХО где-то читал что хватает и две вершины знать чтобы определить столкновение(максимальную и минимальную). 2) я собсно с помощью двух вершин и опредиляю столкновение... 3)оказалось все просто:просто надо определить к какой стороне ближе точка и двигать в сторону нормали этой точку(опять же нормали писать не надо ет я так к слову)... 4)А с поворотом просто считать син и кос максимальной или минимальной точки к центру бокса чтобы двигать точку от бокса относительно локальных координат... Где-то так :) |
Ответ: Столкновение с боксом
нормаль(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). Как-то так. мог с направлением вектора остатка скорости ошибится |
Ответ: Столкновение с боксом
Цитата:
нормаль этой плоскости (a,b,c). Кстати как прямоугольник вроде имеющий всего 4(четыре) угла описать шестью точками?O_o Що за вуду? |
Ответ: Столкновение с боксом
Как можно определить столкновение с повернутым (ну например по оси Y) боксом?
Был вариант преобразовать координаты камеры в объекта чтобы потом: Если камера.х<объект.х то столкновение Но не пойму как преобразовать? Или есть другие способы определения столкновения с повёрнутым объектом? |
Ответ: Столкновение с боксом
правильный способ выучить до понимания це: http://compgraph.tpu.ru/3d.htm
Не правильный, но легкий для восприятия способ это три раза повернуть вокруг осей каждый раз умножая на соответсвующий масштаб вдоль соответствующей оси. Т.е. исходный икс*масштаб по икс=Х в формуле. Хнов=Х*кос(угла)+У*син(угла вокруг зед) Унов=-Х*син(угла вокруг зед)+У*косинус(угол вокруг зед) Ну а смещение потом просто добавляешь к коодинате каждой точки. И чую я, что это вольный пересказ того что в ссылке. Сильно порядок косинусов в моей формуле похож на порядок в матрице поворота, однака. |
Ответ: Столкновение с боксом
Плоскость берешь от бокса, от модели выбираешь самые "широкие" пары точек и проверяешь с одной стороны плоскости эти точки или нет, если по разные, то пересеклись, если одна из точек лежит в плоскости то коснулись :) Если есть пересечение то уже можно подробней смотреть где конкретно для всех точек модели проверяя. Ну и можно сначала по радиусам узнать, рядом вообще бокс и модель или нет. |
Ответ: Столкновение с боксом
Блин все что выше я знаю ну кроме матриц их не сильно, но хотя чуть лучше чем с начала! Поворот каждой точки делаю легко вот токо как проверку сделать столкновения?
Приведу пример: ......................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/.|...................... ......................|...................... |
Ответ: Столкновение с боксом
Открой чтоли аналитическую геометрию на плоскости или в пространстве и выбери способ по вкусу.
|
Ответ: Столкновение с боксом
Я скорее сам додумаюсь с помощью эксперементов чем буду искать что-то.
ЗЫ тем более у меня уже что-то есть на уме щас буду експерементировать.. |
Ответ: Столкновение с боксом
Видимо у тебя повышенный уровень мидихлориан :-D
|
Ответ: Столкновение с боксом
|
Ответ: Столкновение с боксом
Как можно повернуть систему координат камеры, чтобы не мучаться с кос и син углов для опр. столкновения с кривой?
Я хочу чтобы когда объект повёрнут на @град. то камеру тоже повернуть на стоко же и опредилять от неё: Код:
if (camera.y>AB.y) {coll=1;} PS. Что значит команда D3DXVec3TransformCoord()? |
Часовой пояс GMT +4, время: 10:08. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot