Форум

Неправильная работа pick_object

30 июля 2017 12:45
Столкнулся с такой проблемой. Использую такой скрипт, для позиционирования канваса на странице:
onresize = function()
{
    var bodyWidth  = document.body.clientWidth
      , bodyHeight = document.body.clientHeight;
    var scalable = document.getElementById("main_canvas_container");
    scale = Math.min(bodyWidth / 1920, bodyHeight / 1080);
    
    scalable.style.top = (bodyHeight - (scalable.offsetHeight * scale)) / 2 + "px";
    scalable.style.left = (bodyWidth - (scalable.offsetWidth * scale)) / 2 + "px";
    scalable.style.webkitTransform = "scale(" + scale + ")";
}

onresize();


при этом коряво работает функция pick_object. Объекты плохо выделяются, те идет не соответствие фактического расположения объекта. Объект можно выделить только если кликнуть совсем в другую часть экрана. Я не очень понимаю, как работает функция pick_object по этому в замешательстве..
http://vg3d.ru
30 июля 2017 13:01
Да, при этом через нодовую логику все работает, как надо)
http://vg3d.ru
31 июля 2017 10:23
Вангую, что `scale` вы зря используете….
А если честно… Зачем?)))

Поставьте канвас в контейнер и ресайзите его средствами CSS (`width:100%`). Если нужен фиксированный размер, так и ограничьте его также через CSS.


Вот блин, без маркдауна очень тяжело(
31 июля 2017 10:41
Поставьте канвас в контейнер и ресайзите его средствами CSS (`width:100%`). Если нужен фиксированный размер, так и ограничьте его также через CSS.

Вы меня немного не поняли) Мне нужно сделать так, что бы область охватываемая камерой была всегда неподвижна. Я с помощью этого скрипта задаю фиксированные пропорции канваса. Не размер, а пропорции. По этому даже при ресайзе окна браузера пропорции у канваса остаются такие же. Вот пример - https://playcanv.as/p/kx8rLnM1/

Понятно, что именно этот скрипт мешает работе pick_object.
http://vg3d.ru
31 июля 2017 22:58
Ну тогда вам нужно координаты указателя мыши также скейлить.
Но вообще это неправильный, очень очень очень неправильный подход.

Лучше дожидаться окончания изменения размеров экрана и перемещать камеру в нужный чек пойнт, либо искать другие варианты. Скейл вам подкинет проблем еще в разных браузерах…
01 августа 2017 08:32
Ответ на сообщение пользователя Дмитрий Пелевин
Ну тогда вам нужно координаты указателя мыши также скейлить.
Но вообще это неправильный, очень очень очень неправильный подход.

Лучше дожидаться окончания изменения размеров экрана и перемещать камеру в нужный чек пойнт, либо искать другие варианты. Скейл вам подкинет проблем еще в разных браузерах…

Ну скажем так, скейл работает во всех современных браузерах отлично. Мне этого достаточно. Да и другого выхода вроде, как нет для моей задачи.

Пока реализовал все через нодовую логику. Очень странно, но она работает корректно со скейлом. Я так понял это совершенно разные функции.

А кроме pick_object и лучей, есть еще способы выделения объектов?
http://vg3d.ru
01 августа 2017 10:24
Если проблема та, о которой я думаю, то вам поможет пересчет координат: ссылка
- для нодовой логики это происходит автоматически.
01 августа 2017 11:09
Ответ на сообщение пользователя Иван Любовников
Если проблема та, о которой я думаю, то вам поможет пересчет координат: ссылка
- для нодовой логики это происходит автоматически.
Огромное спасибо, простите за мою невнимательность! Это то, что нужно
http://vg3d.ru
 
Пожалуйста, зарегистрируйтесь или войдите под своей учетной записью , чтобы оставлять сообщения.