WEB开发网
开发学院图形图像Flash Flash与3D编程探秘(六)- 全方位旋转摄像机 阅读

Flash与3D编程探秘(六)- 全方位旋转摄像机

 2008-11-12 11:51:10 来源:WEB开发网   
核心提示: 先沿z轴旋转再试图沿y旋转在上面的例子中,如果想要保持旋转半径不变,Flash与3D编程探秘(六)- 全方位旋转摄像机(2),那么一开始我们就不要沿z旋转,不过,我们只要关心旋转后的x和y,并且把它们作为下一次旋转的x_before和y_before,我们拿着摄像机左转右转,怎么可能保持角

先沿z轴旋转再试图沿y旋转

在上面的例子中,如果想要保持旋转半径不变,那么一开始我们就不要沿z旋转。不过,我们拿着摄像机左转右转,怎么可能保持角度不变!?因此你要在每一次摄像机旋转后,计算新的旋转半径。可是如果每一次我们都把旋转半径计算出来,那一定是很头疼!

于是我们聪明的想到了省力的方法。首先,让我们再看一下2D的三角函数(又是三角函数),我们根据旋转半径和旋转角度可以得到x和y:

x=Math.cos(angle)*radius;

y=Math.sin(angle)*radius;

需要注意一点,上面的方程式旋转点为原点,并且之前旋转角度为0。如果我们之前就有旋转角度a,再旋转b,那么我们的方程式就成了:

x=Math.cos(a+b)*radius;

y=Math.sin(a+b)*radius;

看起来眼熟,但是不知道是什么了?别担心:

cos(a+b)=cos(a)*cos(b)-sin(a)*sin(b);

sin(a+b)=sin(a)*cos(b)+sin(b)*cos(a);

把cos(a+b)和sin(a+b)带入上面的x和y求值方程我们就有:

x=radius*cos(a)*cos(b)-radius*sin(a)*sin(b);

y=radius*sin(a)*cos(b)+radius*sin(b)*cos(a);

化简一下得到:

x=x_before*cos(b)-y_before*sin(b);

y=x_before*sin(b)+y_before*cos(b);

这样,我们使用上面两个方程,不用担心你在其他平面(xz或者yz平面)的旋转角度了,也不用每一次旋转后再去计算物体新的旋转半径了,我们只要关心旋转后的x和y,并且把它们作为下一次旋转的x_before和y_before,问题就解决了。下面我把相应的方程式写上:

围绕y轴旋转pan角度:

x=Math.cos(pan)*x_before-Math.sin(pan)*z_before;

z=Math.sin(pan)*x_before+Math.cos(pan)*z_before;

上一页  1 2 3 4 5 6 7  下一页

Tags:Flash 编程 探秘

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接