масштабирование объекта в соответствии с полем зрения

Я накладываю некоторые кликабельные горячие точки поверх проприетарного приложения для просмотра панорам во flash (as3), и мне нужно убедиться, что горячие точки масштабируются в соответствии с изменением поля зрения, когда пользователь увеличивает/уменьшает масштаб, но я не уверен, какую формулу использовать.

Я установил максимальное и минимальное поле зрения 90 и 25 соответственно. Мне дали несколько советов о том, как рассчитать масштаб значков:

от производителя программного обеспечения для панорам:

Scale => 1/tan(FoV)

Кажется, это не работает для меня. И:

scalar += (ZOOM_SCALE_UPPER - ZOOM_SCALE_LOWER) * ( ZOOM_LIMIT_OUT - tempFOV   )/( ZOOM_LIMIT_OUT-ZOOM_LIMIT_IN) ;

hotspot.scaleX = hotspot.scaleY = scalar;

Подводит меня близко, но в какой-то момент точка доступа перестает масштабироваться, хотя панорама продолжает масштабироваться. Я думал, что могу просто сделать что-то вроде:

diffFOV = previousFOV - currentFOV.
hotspot.scale = currentScale*(1-diffFov)

Но и это не совсем правильно. Все становится слишком большим или слишком маленьким.

Любые идеи?


person mheavers    schedule 23.01.2013    source источник


Ответы (1)


Возможно, вы слишком много думаете об этом.

//assume we change the scale
var NEW_SCALE:Number = currentScale*(1-(previousFOV-currentFOV));

//1. change the scale of the parent containing both the view and the hotspots
viewSprite.scale = NEW_SCALE;
//this way the hotspot and the panorama will scale together

//2. if they are not in the same parent... then set them both to the same view
hotspot.scale = panorama.scale;

Единственное, что вам, возможно, придется сделать после этого, — это изменить положение, если они не зарегистрированы в своей центральной точке.

person Reshape Media    schedule 24.01.2013
comment
Эй, ты был прав в том, что я слишком много думал об этом. Мне нужно было сначала рассчитать процентное изменение FOV: (lastFOV-curFieldOfView)/lastFOV ;) Затем применить такое же процентное изменение к масштабу клипов. - person mheavers; 31.01.2013