Функция DceSetSlideOrBounce в менеджере DCE

  Вход на форум   логин       пароль   Забыли пароль? Регистрация
On-line:  

Раздел: 
Форум движка Xtreme3D / Xtreme3D: вопросы и ответы / Функция DceSetSlideOrBounce в менеджере DCE

Страницы: 1  новая тема

Автор Сообщение

Ответственный за CHM
Группа: Модераторы
Сообщений: 346
Добавлено: 23-02-2010 12:23
Как правильно должна работать эта функция: DceSetSlideOrBounce?
То есть, как надо настроить менеджер DCE, что бы при столкновении с объектом, другой объект (обладающий свойством отталкиваться) отталкивался от него, а не останавливался? Или через DCE сделать это невозможно, но зачем тогда эта функция? Может это стоит через ODE делать? Объясните пожалуйста...

P.S при использовании этой функции ничего не меняется, поэтому даже не знаю, что делать...

Big Boss
Группа: Администраторы
Сообщений: 719
Добавлено: 23-02-2010 16:10
Мне кажется, необходимо указать параметр упругости:
DceSetBounce(object,bounce)
Тогда и появится эффект от DceSetSlideOrBounce. Но я не уверен, так как не проверял.

Ответственный за CHM
Группа: Модераторы
Сообщений: 346
Добавлено: 23-02-2010 16:28
Да, параметр упругости влияет на этот эффект, но он там, скажем так, чисто символический. То есть нельзя ни настроить силу с которой объект отталкивается, ничего вообще касательно этого. Отсюда вывод, что эффект не тот, который нужен.
Как же все-таки объект "пружинить" от других объектов? А то пока мне ничего в голову не приходит...

Big Boss
Группа: Администраторы
Сообщений: 719
Добавлено: 24-02-2010 09:27
Ну, вообще DCE - это не физический движок, там никаких сил нет. Все вычисляется очень приближенно и относительно. К тому же, возможно, на скорость движения при отталкивании влияет параметр трения (DceSetFriction).
Теоретически, это отталкивание можно написать вручную. Берем нормаль столкновения, и двигаем объект относительно нее.

Ответственный за CHM
Группа: Модераторы
Сообщений: 346
Добавлено: 24-02-2010 18:43
Ну это и понятно, что не физический, хотя по-проще будет ODE. Например я определяю нормаль столкновения функцией DceGetCollisionNormal, получаю номер столкновения и индекс оси, а дальше-то что, по-сути мне надо направить объект в противоположенную сторону нормали, но я не совсем понимаю, что к чему там.

Big Boss
Группа: Администраторы
Сообщений: 719
Добавлено: 25-02-2010 14:07
Есть функция ObjectTranslate, она двигает объект локально на заданный вектор. То есть:

normal_x=DceGetCollisionNormal(object,0,0);
normal_y=DceGetCollisionNormal(object,0,1);
normal_z=DceGetCollisionNormal(object,0,2);
ObjectTranslate(object,-normal_x*speed,-normal_y*speed,-normal_z*speed);

Ответственный за CHM
Группа: Модераторы
Сообщений: 346
Добавлено: 25-02-2010 19:05
А, спасибо. Как раз осенило. Но так как DCE все же, как оказалось, не совсем меня устраивает, точнее, совсем уже не устраивает, перебраться пришлось в ODE. Возможно, конечно, нужно было создать новую тему, но спрошу здесь, если что потом перенесу.
Итак, суть:
Есть тело и есть, своего рода, магнит. Он притягивает тело и вне зависимости от своего положения держит тело перед собой, так вот я притягиваю тело таким образом:
x1=ObjectGetPosition(models_.box,0);
y1=ObjectGetPosition(models_.box,2);
z1=ObjectGetPosition(models_.box,1);
x2 = ObjectGetPosition(camera_.camera_player,0);
y2 = ObjectGetPosition(camera_.camera_player,2);
z2 = ObjectGetPosition(camera_.camera_player,1);
OdeDynamicAddForce(models_.box,(x2-x1)*5,(y2-y1)*5,(z2-z1)*5);
Но тело постоянно вращается вокруг магнита, а нужно, чтобы было перед ним постоянно и я никак не пойму, что можно придумать...может joins использовать для этих целей?

Big Boss
Группа: Администраторы
Сообщений: 719
Добавлено: 26-02-2010 11:57
Можно и joints. А если вручную, то предлагаю следующий метод: сила притяжения магнита должна быть приложена вдоль вектора, который направлен от центра объекта к центру магнита. Стало быть, нужно найти этот вектор. Я точно не помню, как он вычисляется исходя из координат объектов, но можно это сделать автоматически: в центр объекта поместить dummycube, и направить его на магнит при помощи ObjectPointToObject, затем получить его единичный вектор direction (ObjectGetDirection). Потом умножить вектор на силу, и пожалуйста:
OdeDynamicAddForce(models_.box,vec_x*5,vec_y*5,vec_z*5);

Ответственный за CHM
Группа: Модераторы
Сообщений: 346
Добавлено: 26-02-2010 12:37
Спасибо за идею, попробую. Я, кстати, вспомнил про пример на GMI там нечто подобное, автор вроде Bami, или как его там, так вот там сделано нечто похожее, с тем что я хочу и даже расчет притяжения похож, но сколько бы не ковырялся, так и не понял где и как тело остается в положении перед камерой, а ведь там тоже ode используется

Страницы: 1  новая тема
Раздел: 
Форум движка Xtreme3D / Xtreme3D: вопросы и ответы / Функция DceSetSlideOrBounce в менеджере DCE

Отвечать на темы могут только зарегистрированные пользователи

KXK.RU