Автор | Сообщение |
Hacker Ответственный за CHM Группа: Модераторы Сообщений: 346 |
Добавлено: 23-02-2010 12:23 |
Как правильно должна работать эта функция: DceSetSlideOrBounce? То есть, как надо настроить менеджер DCE, что бы при столкновении с объектом, другой объект (обладающий свойством отталкиваться) отталкивался от него, а не останавливался? Или через DCE сделать это невозможно, но зачем тогда эта функция? Может это стоит через ODE делать? Объясните пожалуйста... P.S при использовании этой функции ничего не меняется, поэтому даже не знаю, что делать... |
|
Gecko Big Boss Группа: Администраторы Сообщений: 719 |
Добавлено: 23-02-2010 16:10 |
Мне кажется, необходимо указать параметр упругости: DceSetBounce(object,bounce) Тогда и появится эффект от DceSetSlideOrBounce. Но я не уверен, так как не проверял. |
|
Hacker Ответственный за CHM Группа: Модераторы Сообщений: 346 |
Добавлено: 23-02-2010 16:28 |
Да, параметр упругости влияет на этот эффект, но он там, скажем так, чисто символический. То есть нельзя ни настроить силу с которой объект отталкивается, ничего вообще касательно этого. Отсюда вывод, что эффект не тот, который нужен. Как же все-таки объект "пружинить" от других объектов? А то пока мне ничего в голову не приходит... |
|
Gecko Big Boss Группа: Администраторы Сообщений: 719 |
Добавлено: 24-02-2010 09:27 |
Ну, вообще DCE - это не физический движок, там никаких сил нет. Все вычисляется очень приближенно и относительно. К тому же, возможно, на скорость движения при отталкивании влияет параметр трения (DceSetFriction). Теоретически, это отталкивание можно написать вручную. Берем нормаль столкновения, и двигаем объект относительно нее. |
|
Hacker Ответственный за CHM Группа: Модераторы Сообщений: 346 |
Добавлено: 24-02-2010 18:43 |
Ну это и понятно, что не физический, хотя по-проще будет ODE. Например я определяю нормаль столкновения функцией DceGetCollisionNormal, получаю номер столкновения и индекс оси, а дальше-то что, по-сути мне надо направить объект в противоположенную сторону нормали, но я не совсем понимаю, что к чему там. | |
Gecko 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); |
|
Hacker Ответственный за 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 использовать для этих целей? |
|
Gecko 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); |
|
Hacker Ответственный за CHM Группа: Модераторы Сообщений: 346 |
Добавлено: 26-02-2010 12:37 |
Спасибо за идею, попробую. Я, кстати, вспомнил про пример на GMI там нечто подобное, автор вроде Bami, или как его там, так вот там сделано нечто похожее, с тем что я хочу и даже расчет притяжения похож, но сколько бы не ковырялся, так и не понял где и как тело остается в положении перед камерой, а ведь там тоже ode используется |
Offtop.ru © 2003 |