Flash 三维引擎初探
作者 佚名技术
来源 服务器技术
浏览
发布时间 2012-07-15
eyez=-500;//视点的位置 zorder=100;//视平面深度 二、 构建引擎 这一步是整个程序的核心,完成了引擎差不多就等于完成了全部。 2.1 初始化 在开始真正的引擎前我们先来做一些初始化的工作——将所定义模型的信息转存到一个个单独的变量中。在init帧中输入以下代码: setProperty ("/baseline", _x, 1000);//隐藏原来的那条线 //下面的循环转存所有点的信息 for (i=1; i<=totalpoints; i++) { set ("x" add i, substring(points, Number((i-1)*12+1), 3)); set ("y" add i, substring(points, Number((i-1)*12+5), 3)); set ("z" add i, substring(points, Number((i-1)*12+9), 3)); } //下面的循环转存所有线的信息 for (i=1; i<=totallines;i++) { set ("pt1" add i, substring(lines, Number((i-1)*5+1), 2)); set ("pt2" add i, substring(lines, Number((i-1)*5+3), 2)); } //下面两个变量分别表示显示中心点的x和y centerx=190; centery=215; 2.2 创建基本循环 完成了初始化,下面我们来建立程序中最基本的循环。选中loop帧,并在其中输入: gotoAndPlay ("start"); 2.3 绘制模型 绘制模型的过程可分为两个部分,第一部分将三维物体的各点坐标值转换为投影到视平面S上的相应二维坐标;第二部分根据转换完毕的二维坐标在视平面S上绘制出图像。在这个例子里我们在帧draw里面进行三维坐标的二维化,然后使用帧drawline来进行绘制工作。所以,在帧draw里输入以下的代码: //下面的循环根据公式进行三维坐标的二维化 for (i=1; i<=totalpoints; i++) { u = (zorder-eyez)/(eval("z" add i)-eyez);//二维化公式 if (i<=9) { set ("2Dx0" add i, u*eval("x" add i)+centerx); set ("2Dy0" add i, u*eval("y" add i)+centery); } else { set ("2Dx" add i, u*eval("x" add i)+centerx); set ("2Dy" add i, u*eval("y" add i)+centery); } } //下面的循环负责复制线段并将之显示出来 for(i=1;i<=totallines;i++){ duplicateMovieClip("/baseline","line" add i,i); call("drawline"); } 在帧drawline里输入以下的代码: pt1 = eval("pt1" add i); pt2 = eval("pt2" add i); setProperty ("line" add i, _x, eval("2Dx" add pt1)); setProperty ("line" add i, _y, eval("2Dy" add pt1)); setProperty ("line" add i, _xscale, eval("2Dx" add pt2) - eval("2Dx" add pt1)); setProperty ("line" add i, _yscale, eval("2Dy" add pt2) - eval("2Dy" add pt1)); 至此绘制模型的工作大致就做完了,在start帧中输入: call("draw"); 按Ctrl+Enter后就可以看到你所定义的模型的模样了。 2.4 旋转 旋转其实也很简单,只要将坐标根据不同旋转角度重新映射一次就可以了,下面是一组用于旋转计算的公式: 沿x轴旋转: 沿y轴旋转: 沿z轴旋转: 由于篇幅有限,这里就只介绍一种旋转方式——沿x轴旋转。 根据上面的这些公式,我们还需要设置一些变量来满足要求。在init帧中追加以下的代码: basecos=0.9848; //cos10的值 basesin=0.1736; //sin10的值 cos=basecos; sin=basesin; axis="x";//沿哪个轴旋转,这里是x也就是说沿x轴旋转 在rotx中输入如下的代码: //根据不同的角度值重新计算二维坐标 for (i=1; i<=totalpoints; i++) { set ("tmp", (sin*eval("y" add i))+(cos*eval("z" add i))); set ("y" add i, (cos*eval("y" add i))-(sin*eval("z" add i))); set ("z" add i, tmp); } 接下来只要在start帧中call("draw");的上面插入一句 call("rot" add axis);//根据axis的值调用不同类型 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |
你可能对下面的文章感兴趣
上一篇: 用Flash实现神奇的小球文字动画下一篇: 制作自己的Flash屏保安装程序
关于Flash 三维引擎初探的所有评论