Flash与3D编程探秘(六)- 全方位旋转摄像机
2008-11-12 11:51:10 来源:WEB开发网先沿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;
- ››FLASH不等于运算符!=的使用实例
- ››FLASH不全等运算符!==
- ››FLASH字符串分隔符运算符
- ››FLASH% 模运算符
- ››Flash+、++、+= 加法运算符
- ››Flash, 逗号运算符
- ››flash中的-、--、-=减法运算符
- ››Flash的-Infinity 常数、.点运算符、/ 除法运算符...
- ››Flash两种注释方法/*..*/ 和// 注释行分隔符运算符...
- ››Flash的/=除法赋值运算符、=赋值运算符、== 等于运...
- ››Flash之?: 条件运算符、^ 按位 XOR 运算符、^= 按...
- ››Flash的_framesloaded代码示例
更多精彩
赞助商链接