Форум

Сообщения, созданные пользователем Dragon3DGraff
14 апреля 2016 13:01

Когда смотрел ваш проект, подумал о том что тут удобнее крутить камеру вокруг куба, а для шарика менять направление гравитации относительно камеры. Тогда саму физику куба можно оставить статичной.
А окружающие элементы прикрепить к камере
интересное предложение, а как поменять направление гравитации?
Дорогу осилит идущий
14 апреля 2016 11:25
Выявил опытным путем, что если прозрачность материала меньше 0,5, то есть даже 0,499 - то объект уже не pickается а я хотел сделать основной куб, который вращаю (без физики), а внутри него поместить элементы с физическими свойствами и внутри шарик. Внутрь куба же шарик не поместить, по мешу физика не поддерживается, соответственно стенки куба и лабиринт внутри должен быть сделан боксами или плоскостями. (Но тут другой момент, который я еще не до конца оттестил правда - между стыков боксиков шарик вываливается )
Если нельзя "обернуть" в прозрачный куб какой еще метод можно использовать?
Дорогу осилит идущий
14 апреля 2016 11:16

попробовать поиграться с функцией cal_ray
https://www.blend4web.com/api_doc/module-camera.html#.calc_ray
я думал про нее, в одном из уроков еще про нее есть, в интерьере вроде. Но пока не сообразил как сделать возможно буду пробовать разные способы, а так же надо проработать адаптивность - если сильно крутить шарик вываливается сквозь стенки. еще думал - если потянуть за правый край кубика - он должен наклониться вправо, а не запрокидываться на меня, наверно надо будет проверить по координатам и размерам кубика где ткнули
Дорогу осилит идущий
13 апреля 2016 19:05
Такой вариант мне нравится больше :)
var cam = m_scenes.get_active_camera();
	   m_transform.get_rotation(cam, quat_cam);
	   //получаем направляющие векторы в глобальной системе координат для осей X и Y из локального пространства координат камеры  
       //вокруг этих векторов далее и будет происходить вращение 
       m_util.quat_to_dir(quat_cam, AXIS_X, CAM_X);
       m_util.quat_to_dir(quat_cam, AXIS_Y, CAM_Y);
	   
	    //получаем кватернионы вращения вокруг "глобальны" осей
       m_quat.setAxisAngle(AXIS_Y, delta_x*0.01, quat_Y);
       m_quat.setAxisAngle(CAM_X, delta_y*0.01, quat_X);

m_transform.get_rotation(_selected_object, quat_obj);

//вращаем наш объект в глобальной системе координат
//порядок операндов важен! в противном случае вращение будет происходить в локальной системе объекта
m_quat.multiply(quat_X, quat_obj, quat_obj);
m_quat.multiply(quat_Y, quat_obj, quat_obj);
m_transform.set_rotation_v(_selected_object, quat_obj);

Я оставил по горизонтали как у меня было
m_quat.setAxisAngle(AXIS_Y, delta_x*0.01, quat_Y);
, а по вертикали - как Вы посоветовали.
Вроде то, что я хотел, не знаю как потом будет по геймплею, но это уже увижу когда будет чем играть
Спасибо еще раз
Дорогу осилит идущий
13 апреля 2016 18:16
Спасибо. вверх и вниз стало работать лучше, а вот вправо-влево - хуже… он как бы "качается" как на качелях. получается непредсказуемо крутится…
Наверно стоит сказать, что это будет что-то типа этого
То есть игрок должен получить ожидаемое вращение
Дорогу осилит идущий
13 апреля 2016 16:06

Ответ на сообщение пользователя Кирилл
Не, не так, извиняюсь… frowning
а я только начал вникать
Дорогу осилит идущий
13 апреля 2016 16:04

Навскидку похоже что вам нужно домножить реузльтирующий кватернион слева на кватернион текущего положения камеры
Если я правильно понял….
 var cam = m_scenes.get_active_camera();
	   m_transform.get_rotation(cam, quat_cam);
	   
	   m_quat.setAxisAngle(AXIS_Y, delta_x*0.01, quat_tmp);
	   m_quat.setAxisAngle(AXIS_X, -delta_y*0.01, quat_tmp3);
m_transform.get_rotation(_selected_object, quat_tmp2);
m_quat.multiply(quat_tmp, quat_tmp2, quat_tmp);
m_quat.multiply(quat_tmp, quat_tmp3, quat_tmp);
m_quat.multiply(quat_tmp, quat_cam, quat_tmp);
m_transform.set_rotation_v(_selected_object, quat_tmp);

но стало еще хуже… теперь его колбасит безбожно….
Дорогу осилит идущий
13 апреля 2016 14:29
Добрый день!
Решил сделать возможность поворота объекта мышкой.
Никак не могу разобраться до конца в кватернионах
Я хочу, чтобы кубик вращался как бы относительно системы координат параллельных экрану. То есть я потащил мышу вправо - и кубик вправо и крутится, независимо от того как он сейчас повернут. Потянул вверх - крутится вверх. Сейчас пока добился того, что он крутится относительно своих локальных осей. При чем пробовал и кватернионами и "простым"
 m_quat.setAxisAngle(AXIS_Y, delta_x*0.01, quat_tmp);
	   m_quat.setAxisAngle(AXIS_X, -delta_y*0.01, quat_tmp3);
m_transform.get_rotation(_selected_object, quat_tmp2);
m_quat.multiply(quat_tmp, quat_tmp2, quat_tmp);
m_quat.multiply(quat_tmp, quat_tmp3, quat_tmp);
m_transform.set_rotation_v(_selected_object, quat_tmp);
   //m_transform.rotate_x_local(_selected_object, delta_y*0.01);   
   //m_transform.rotate_y_local(_selected_object, delta_x*0.01);


нашел какой то SPACE_WORLD, но не знаю, как применить
Подскажите, пожалуйста
Проект прикрепилproject.zip
Дорогу осилит идущий
21 марта 2016 10:45
походу повесили сервак )) жуткие задержки, шмаляю - а шариков нет. через секунду появляются. палил по кому то - и он пропал…
Дорогу осилит идущий
21 марта 2016 10:38

Ответ на сообщение пользователя Кирилл
Пока что у деревьев нет колижен модели. Так как они немного качаются от ветра… Думаю по поводу этого. Наверно цилиндры поставлю в центральные стволы.
да, хорошая идея)
Дорогу осилит идущий