| 首页 | 新闻 | 网页 | 设计 | 色彩 | 原创 | 视觉 | 素材 | 动漫 | 酷站 | 策划 | 文案 | 访谈 | 运营 | 编程 | 数据库 | 服务器 | 下载 | 图库 | 
您的位置: 幽幽天空 > 网页 > 网页制作 > Flash教程 > ActionScript教程 > 文章正文 用户登录
没有相关文章

实时三维动画内核分析           

实时三维动画内核分析

作者:边城浪子 来源:闪客帝国 更新:2005-1-5 21:53:34 错误报告 我要投稿

  好吧,今天,让未来带领大家进入“真三维的 Flash 世界”——其实只是很简单的“三维”了。

  先看看这个:

  三维动画可能对大多数人来说都是可望而不可及的吧?是不是总觉得自己不可能制作出真正的三维的东西来呢?错!当你了解了三维的基础知识以后,这些想法就不存在了!而且您会很快就掌握它的制作方法!不相信?举个例子,我一直没有研究过三维基础知识,当我找到一本书以后,马上就编写出我的第一个真三维的动画,仅仅半小时!好了,有信心了吧?开始!


  1)在平面上画线

  在 Flash 中,所谓“画”线,其实就是将一个线型的 MovieClip 改变角度和长度,并且把它放在正确的位置上。

  我现在来说明怎样“画”一条线段。

  首先,看我们的 MovieClip,它是这个样子的:

  下面,我们该开始“画”的过程了。从 (x1,y1) 到 (x2,y2)。

  首先,看下图,我们可以复习一下上学时学到的东西,了解一下怎样求两点之间的距离。

  是了,两点之间的距离应该是

dx= x2 - x1;

dy= y2 - y1;

line_length = Math.sqrt(dx*dx+dy*dy);

  然后,再看看怎样求旋转的角度。我们从三角函数的知识知道:正切 tan(ANGLE)=dy:dx,那么,好,我们已经知道了 dx 和 dy,就可以得出 tan(ANGLE) 的值,然后用 Flash 5 提供的反正切函数 atan 就可以计算出 ANGLE。

  不过,要注意的是,取得的 ANGLE 是以弧度计算的,我们还需要把它转换成角度。为什么要转换成角度呢?因为我们要旋转 MovieClip,而这个旋转的角度不是弧度,而是标准的角度。取得角度以后,如果是钝角,还要做一下运算。具体程序如下:

angle = Math.atan(dy/dx); 

angle = angle*180/Math.PI;

if (dx < 0){

angle = angle-180;

}  (判断一下角度是否为钝角) 

  取得长度、角度以后,就可以“画”线了,我们先把线的顶端设置到 (x1,y1),然后通过改变长度和角度使得线的尾部到达 (x2,y2)。

setProperty ("line", _x, x1);

setProperty ("line", _y, y1); 

setProperty ("line", _rotation, angle);

setProperty ("line", _xscale, line_length);

  好了,“画”线这个最基本的环节我们完成了!

  2)空间上的点和线

  平面上的点我们会用 (x,y) 来表示,而当这个概念延伸到三维上以后,空间上的点就应该定义为 (x,y,z) ,其中,xy 的意义和传统上是一样的,而这个z则是代表垂直于平面上的“深度”,因此,在空间上的点 (10,10,100) 会表现得比 (10,10,10) 更“深”一些。

  那么,怎样来在二维平面上来表现空间上的点的位置呢?这里有一个经典的算法:

x=(x/(z+d))*d;

y=(y/(z+d))*d;

  其中,d 代表观察者与物体之间的距离。

  通过这个表达式,我们就可以轻易的计算出任何空间上的点在平面上的位置。比如:我们现在需要画从 (x1,y1,z1) 到 (x2,y2,z2) 的线,就可以先这样转换一下:

x1=(x1/(z1+d))*d;

y1=(y1/(z1+d))*d;

x2=(x2/(z2+d))*d;

y2=(y2/(z2+d))*d;

  轻易的取得了平面上的坐标,我们就可以绘制三维空间的线条了,同上面(1)部分讲过的一样,很简单不是么?

  3)实现三维的运动

  如果您很聪明,那么现在已经完全可以绘制一些复杂的三维模型了,不过最好别让他们运动,因为一旦要运动,那麻烦就来了。因为三维的运动还是需要一些三维方面的知识,精华的部分就在这里:

(Z旋转)
x=x*cos(A)+y*sin(A) y=x*cos(A)-y*sin(A)


(Y旋转)

x=x*cos(A)-z*sin(A) z=x*sin(A)+z*cos(A)


(X旋转)

y=y*cos(A)+z*sin(A) z=z*cos(A)-y*sin(A)

  好了,可以动手了!有了这些公式,我们就可以进行复杂的三维变换了!这里的 A 就是旋转的角度,那么,不管您想让我们的三维物体向哪个方向旋转,都有相应的公式可以计算出二维空间的点的坐标,也就是说,我们完全可以成功的把三维的东东用二维表现出来!

  具体上面的这个动画是怎么做的,我就不想多谈了,大家可以仔细的研究源代码,尽管代码有些丑陋,但是相信您不会失望的。

  好,再见!有事情和我联系!flasher@flashempire.com

  源代码下载

文章录入:skyuu    责任编辑:skyuu 
  • 上一篇文章:

  • 下一篇文章:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    发表评论:
    姓名:  评 分: 1分 2分 3分 4分 5分
     
  • 严禁发表危害国家安全、政治、黄色淫秽等内容的评论。
  • 用户需对自己在使用幽幽天空服务过程中的行为承担法律责任。
  • 本站管理员有权保留或删除评论内容。
  • 评论内容只代表机友个人观点,与本网站立场无关。