Вопрос - ответ
02 марта 2016 18:05
Тут завалялся вопрос, пожалуй, отвечу.
Да, calc_ray не рассчитан на использование с орто-камерой, но мы решили добавить эту возможность в ближайшем релизе.
А пока можно посчитать самому вручную. Найти точку пересечения будет довольно просто. Для перевода координат мыши в координаты сцены потребуется знать размеры фрустума ("пирамида видимости" как-то плохо звучит ) камеры. Метод get_ortho_scale вернет его вертикальный размер в метрах. С канвас-контейнера берем размеры вьюпорта в пикселях. Дальше считаем коэффициент соотношения :
Текущая позиция камеры соответствует центру вьюпорта, так что смещение от центра в пикселях можно перевести в смещение относительно позиции камеры в метрах. Так мы получим координаты нужной точки в горизонтальной плоскости, проходящей через камеру. Если плоскость, с которой ищется пересечение - горизонтальная, то можно легко спроецировать точку на неё, если нет - то можно воспользоваться методом line_plane_intersect.
Да, ещё, если камера будет вращаться, то понадобится учитывать её кватернион поворота.
И еще появился вопрос.
Попробовал ортогональную камеру.
С ней не работает camera.calc_ray.
Т.е. при камере с перспективой, чтобы переместить объект, куда показывает курсор на нужной плоскости, мы
используем calc_ray для поиска точки пересечения луча камеры с нужной плоскостью.
В случае с ортогональной камерой вроде как пересечение искать и не надо наверно - куда ткнули, туда и ставим объект видимо. Но как преобразовать координаты мыши в координаты сцены, чтобы переместить туда объект (при ортогональной камере, которая смотрит на сцену строго перпендикулярно сверху)?
Да, calc_ray не рассчитан на использование с орто-камерой, но мы решили добавить эту возможность в ближайшем релизе.
А пока можно посчитать самому вручную. Найти точку пересечения будет довольно просто. Для перевода координат мыши в координаты сцены потребуется знать размеры фрустума ("пирамида видимости" как-то плохо звучит ) камеры. Метод get_ortho_scale вернет его вертикальный размер в метрах. С канвас-контейнера берем размеры вьюпорта в пикселях. Дальше считаем коэффициент соотношения :
var camera = m_scenes.get_active_camera();
var v_size = m_cam.get_ortho_scale(camera);
var container = m_cont.get_container();
var coeff = v_size / container.offsetHeight;
Текущая позиция камеры соответствует центру вьюпорта, так что смещение от центра в пикселях можно перевести в смещение относительно позиции камеры в метрах. Так мы получим координаты нужной точки в горизонтальной плоскости, проходящей через камеру. Если плоскость, с которой ищется пересечение - горизонтальная, то можно легко спроецировать точку на неё, если нет - то можно воспользоваться методом line_plane_intersect.
Да, ещё, если камера будет вращаться, то понадобится учитывать её кватернион поворота.
02 марта 2016 18:09
02 марта 2016 18:10
02 марта 2016 18:25
Вот скрины. Сделал файл в blendere. Вывел сразу в html. Второй закинул в менеджер проектов получил плоскость. Как с этим бороться?Я говорил про скриншот консоли браузера, а не просто вид 3D контента в нем. Ну или пришлите сам blend файл.
Blend4Web и всё такое. Тридешу тридэ, моделю модели.
04 марта 2016 00:21
Вопрос. Как анимировать вращения объектов по локальным осям и локальным раздельно? Пример: самолёт летает по сцене, а пропеллер крутится вдоль своей локальной оси.
04 марта 2016 06:14
Ответ на сообщение пользователя Андрей
Вопрос. Как анимировать вращения объектов по локальным осям и локальным раздельно? Пример: самолёт летает по сцене, а пропеллер крутится вдоль своей локальной оси.
1 Action propeller ) vybiraesh object Propeller Ctrl+ object Samolet > Ctrl+p Object
Акылбек
04 марта 2016 10:36
Спасибо, именно то что мне нужно было!
04 марта 2016 10:54