【发布时间】:2017-02-08 17:37:10
【问题描述】:
我有一个轨道相机,它的轨道是一个地球仪。地球上有几个标记可供用户单击,相机将移动到该点。
使用 TweenMax 制作这样的动画 -
TweenMax.to(currentPos, 3, {
theta:targetPos.theta,
phi:targetPos.phi,
radius:targetPos.radius,
ease:Circ.easeIn,
onComplete:btnZoomComplete,
onUpdateParams:["{self}"],
onComplete:SataliteTweenComplete,
onUpdate: function(tween) {
controls.setThetaPhi(tween.target.theta, tween.target.phi, tween.target.radius);
}
});
这很好用,但是没有考虑到那里的最短路线。所以它经常可以“绕地球一圈”。
ThreeJS 似乎在一个非常奇怪的单位系统中测量角度: 0、1.57(相当于 90 度)、3.14(eq 180dg),然后在 3.14 之后跳到 -3.14、-1.57(eq 到 270dg),然后回到 0... 所以这让我对如何工作感到震惊出去。
例如,假设相机在 2.6 并且它需要转到 -2.61,此时相机将为 CCW 设置动画(2.6 到 -2.16),而视觉上它需要为 CW 设置动画,这将从2.6 到 3.14,-3.14 然后到 -2.61。
对此的任何帮助将不胜感激。
我想有两个问题,如何计算出循环的方式,然后如何实际动画从 2.6 -> 3.14,无缝跳转到 -3.14 -> -2.61
【问题讨论】:
标签: javascript math three.js trigonometry