|
Xors3D Графический движок с поддержкой DirectX9 |
04.04.2012, 20:41
|
#1
|
Разработчик
Регистрация: 08.03.2007
Сообщений: 530
Написано 31 полезных сообщений (для 36 пользователей)
|
Нормаль коллизии
Всё бы здорово только надо это порделать с анимированной моделью.Первая модель сложная вогнутая, но мне нужно узнать соприкосновение сферы с выгнутой частью этой модели. Кароче мне нужна нормаль к поверхности сферы и прикосающейся к ней анимированной модели. Что можете посоветовать?
|
(Offline)
|
|
04.04.2012, 23:34
|
#2
|
Мастер
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений (для 1,836 пользователей)
|
Ответ: Нормаль коллизии
Если у тебя есть точка на сфере, то от центра сферы к точке можешь найти вектор ты. Приведя его к единичной длине получишь нормаль к этой точке поверхности сферы.
Хоть бы схему нарисовал, да?
ЗЫ чувствую себя кэпом.
|
(Offline)
|
|
04.04.2012, 23:49
|
#3
|
Разработчик
Регистрация: 08.03.2007
Сообщений: 530
Написано 31 полезных сообщений (для 36 пользователей)
|
Ответ: Нормаль коллизии
dsd, это априори известно, про сферу то, я еще упомянул модель мою, и нормаль к ней в той точке в которой соприкасается сфера и модель. Нормаль к поверхности сферы, легко. Нормаль к поверхности неопределенного 'анимированного' меша сложнее, и к тому же надо найти точку их соприкосновения.
|
(Offline)
|
|
04.04.2012, 23:55
|
#4
|
Мастер
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений (для 1,836 пользователей)
|
Ответ: Нормаль коллизии
А проверить все точки в радиусе ли сферы они или нет? А также проверить плоскости всех полигонов, а не ближе ли они к центру сферы, чем радиус оной? В чем проблема то? Или нужна команда с флагом которая все сама сделает?
|
(Offline)
|
|
05.04.2012, 00:03
|
#5
|
Разработчик
Регистрация: 08.03.2007
Сообщений: 530
Написано 31 полезных сообщений (для 36 пользователей)
|
Ответ: Нормаль коллизии
dsd, до того как ты написал первый пост я уже это реализовал.)) На модели вертексы нужные красятся, сейчас у меня загвоздка как правильно нормаль из неё вытянуть. Помогеш мне? nx,ny,nz определил, но как правильно в глобал их передать?
|
(Offline)
|
|
05.04.2012, 00:07
|
#6
|
Мастер
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений (для 1,836 пользователей)
|
Ответ: Нормаль коллизии
xTform для чего создана была? А ваще всякие там матрицы смещения, поворота, масштаба. Ну синусы, косинусы разные.
|
(Offline)
|
|
05.04.2012, 00:12
|
#7
|
Разработчик
Регистрация: 08.03.2007
Сообщений: 530
Написано 31 полезных сообщений (для 36 пользователей)
|
Ответ: Нормаль коллизии
dsd, да вот что то не выходит с tform'ом, а "всяки" это сложно. Ща попробую как то отбразить их, наверн через лайн, а то не пойму что вообще выходит. Кстать анимация довольно быстрая и меш бывает проваливается в сферу в первом же касании давольно глубоко, этим еще осложняется.
|
(Offline)
|
|
05.04.2012, 00:22
|
#8
|
Мастер
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений (для 1,836 пользователей)
|
Ответ: Нормаль коллизии
смотри. Есть полигоны. Для каждого полигона ты можешь найти его центр. Ну и радиус сферы внутри которой этот полигон точно поместится.
Проверить есть ли пересечение этих сфер просто. И ты это уже делал когда обратную кинематику делал. Если нет пересечения, значит полигон не касается. Если есть и касание по какой-то вершине или ребру, то нормаль это минус нормаль сферы к этой точке. А если касание происходит на полигоне то нормаль это нормаль плоскости совпадающей с полигоном.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
05.04.2012, 00:33
|
#9
|
Разработчик
Регистрация: 08.03.2007
Сообщений: 530
Написано 31 полезных сообщений (для 36 пользователей)
|
Ответ: Нормаль коллизии
Пока на малой скорости проверяю дистанцию от точек. Если этого будет не достаточно то попробую, но пока сложновато понимаю как это... про то что ты сказал.
А глянь вот это как думаеш, должно работать?
x=xVertexX(surf,Vertex)
y=xVertexY(surf,Vertex)
z=xVertexZ(surf,Vertex)
xTFormPoint (x,y,z,Smash,0)
Nx=xVertexNX(surf,Verte)
Ny=xVertexNY(surf,Verte)
Nz=xVertexNZ(surf,Verte)
xCameraProject(camera,Nx+xTFormedX(),Ny+xTFormedY(),Nz+xTFormedZ())
x2#=xProjectedX()
y2#=xProjectedY()
xCameraProject(camera,xTFormedX(),xTFormedY(),xTFormedZ())
xUpdateWorld ()
xRenderWorld()
xLine(xProjectedX(),xProjectedY(),x2,y2)
xFlip()
|
(Offline)
|
|
05.04.2012, 00:40
|
#10
|
Мастер
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений (для 1,836 пользователей)
|
Ответ: Нормаль коллизии
Нормаль тоже тформить надо. А так че бы и не работать ей?
Но ты лучше кубик вытяни и ставь на тформленную точку и равняй по тформленному вектору, так оно наглядней по моему.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
05.04.2012, 00:43
|
#11
|
Разработчик
Регистрация: 08.03.2007
Сообщений: 530
Написано 31 полезных сообщений (для 36 пользователей)
|
Ответ: Нормаль коллизии
dsd,лады попробую.
|
(Offline)
|
|
05.04.2012, 00:51
|
#12
|
Разработчик
Регистрация: 08.03.2007
Сообщений: 530
Написано 31 полезных сообщений (для 36 пользователей)
|
Ответ: Нормаль коллизии
Хм, а ровнять вектор_пинчем и _явом? Линия получилось смотрит параллельно плоскости ксания. Не порядок...
|
(Offline)
|
|
05.04.2012, 01:10
|
#13
|
Мастер
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений (для 1,836 пользователей)
|
Ответ: Нормаль коллизии
О господи! xAlignToVector, же.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
05.04.2012, 21:58
|
#14
|
Разработчик
Регистрация: 08.03.2007
Сообщений: 530
Написано 31 полезных сообщений (для 36 пользователей)
|
Ответ: Нормаль коллизии
ах да!) верно!))
|
(Offline)
|
|
05.04.2012, 22:02
|
#15
|
Разработчик
Регистрация: 08.03.2007
Сообщений: 530
Написано 31 полезных сообщений (для 36 пользователей)
|
Ответ: Нормаль коллизии
dsd, объясни подробней прошу, про то что если нормаль шара вычесть из точки то получу нормаль точки, или я тебя не понял? ( ПОСТ_8 )
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 08:49.
|