Flash与3D编程探秘(四)- 摄像机旋转基础知识
2008-11-12 11:51:27 来源:WEB开发网反三角函数
在Flash里,我们可以通过直角三角形的两个边的比率得到角度,用下面的代码即可:
angle=Math.atan2(object.y,object.x);
angle=Math.atan(y/x);
还有一个要说明的那就是勾股定理:
hypotenuse=Math.sqrt(x*x+y*y);
那么你现在已经具备2D旋转的基本知识了,我们再看一下3D,3D旋转中加进了z轴,hum,那么我们就把xy平面,yz平面,zx平面的旋转组合起来,就得到摄像机的全方位旋转。不过指得注意的是,三角法不能直接运用到我们的摄像机旋转中,我们可以在横向旋转摄像机的时候保持摄像机的旋转角度不变,取而代之我们旋转x和z轴,要旋转180度的话,我们可是使z旋转到x的位置然后再转到z的位置,同时保持y轴不动。
旋转x和z轴
横向旋转摄像机
上面讲述了一些旋转摄像机的原理,我们更关心的是如何使用这些原理来解决问题。联想一下实际,对于摄像机的横向旋转来说,摄像机的所在位置的高度y,深度z和横向x都是保持不变的,唯一改变的就是摄像机的旋转角度。也就是说当一个空间中的物体在位置不变的情况下,摄像机与它的距离是不变的,于是我们的问题转化成在角度变化的情况下保证它们的距离不变。我们设旋转后的角度为a,那么物体所在的x和y(以摄像机为原点建立坐标系)就是:
x=distance*Math.cos(a);
y=distance*Math.sin(a);
如果我们摄像机所在的坐标为(x0,y0)的话,我们就可以得到物体所在的坐标(还是上面讲过的公式):
x=x0+distance*Math.cos(a);
y=y0+distance*Math.sin(a);
以上所述的仅是对一个物体的操作,同样道理我们对所有舞台上的物体进行操作,那么我们所看到的就是我们摄像机旋转后的景象。
对比旋转物体和旋转摄像机
在上面的动画中,我们俯瞰整个场景,对比一下旋转摄像机和旋转舞台上所有物体的差异。当然对于其他的平面(纵向旋转摄像机)来说,我们可以运用相同的理论对物体进行操作。那么,你应该有种感觉你已经具备所有摄像机旋转的理论知识了,不过还有一小点,我们将在下一篇文章进行分析。
相关文章:
Flash与3D编程探秘(七)- 3D物体框架
Flash与3D编程探秘(六)- 全方位旋转摄像机
Flash与3D编程探秘(一)- Flash与3D空间
Flash与3D编程探秘(五)- 摄像机旋转和移动
Flash与3D编程探秘(四)- 摄像机旋转基础知识
Flash与3D编程探秘(三)- 摄像机(Camera)
作者:YangZhou
出处:http://yangzhou1030.cnblogs.com/
感谢:Yunqing
- ››FLASH不等于运算符!=的使用实例
- ››FLASH不全等运算符!==
- ››FLASH字符串分隔符运算符
- ››FLASH% 模运算符
- ››Flash+、++、+= 加法运算符
- ››Flash, 逗号运算符
- ››flash中的-、--、-=减法运算符
- ››Flash的-Infinity 常数、.点运算符、/ 除法运算符...
- ››Flash两种注释方法/*..*/ 和// 注释行分隔符运算符...
- ››Flash的/=除法赋值运算符、=赋值运算符、== 等于运...
- ››Flash之?: 条件运算符、^ 按位 XOR 运算符、^= 按...
- ››Flash的_framesloaded代码示例
更多精彩
赞助商链接