FLASH_3D教程——从头开始
作者 佚名技术
来源 服务器技术
浏览
发布时间 2012-07-08
=y1 z2=z1*cosb+x*sinb z旋转(z不变) x3=x2*cosb-y1*sinb y3=y1*cosb+x2*sinb z3=z2 从以上公式可看出,在flash要实现旋转,先要求x轴的旋转点,再求y轴的旋转点,最后再求出z轴的旋转点。最后我们来一个x旋转的应用 三、制作x轴旋转的正方体 1、在场景中画一小球,并按F8转换为mc,实例命名为qiu。 2、增加一层,命名为as,接下去我们来写as,如下: _root.onLoad = function() { shumu = 8; // 定义复制小球的数目 qiu._x = 6000; // 让原始小球消失 for (var i = 0; i } // 复制小球,作为正方体的八个顶点 qiu_pos_x = new Array(100, 0, 0, 100, 100, 0, 0, 100); qiu_pos_y = new Array(100, 100, 100, 100, 0, 0, 0, 0); qiu_pos_z = new Array(50, 50, -50, -50, 50, 50, -50, -50); // 从三维坐标中取正方体的8个顶点的坐标,保存在数组中 D = 200; // 观察者与屏幕的距离 hutu = 0.001; // 控制旋转的速度 b = hutu*180/Math.PI; // 角、弧度的转换 }; _root.onEnterFrame = function() { for (var i = 0; i y1 = qiu_pos_y[i]*Math.cos(b)-qiu_pos_z[i]*Math.sin(b); z1 = qiu_pos_z[i]*Math.cos(b)+qiu_pos_y[i]*Math.sin(b); // 按公式计算 qiu_pos_x[i] = x1; qiu_pos_y[i] = y1; qiu_pos_z[i] = z1; // 更新数组元素 ratio = D/(D+z1); perspective_x = x1*ratio; perspective_y = y1*ratio; // 按公式计算 _root["qiu"+i]._x = 275+perspective_x; _root["qiu"+i]._y = 200-perspective_y; / 设置球的坐标 _root["qiu"+i]._xscale = _root["qiu"+i]._yscale=50*ratio; // 球的大小 _root["qiu"+i].swapDepths(10000-qiu_pos_z[i]); // 球的层次 _root["qiu"+i]._alpha=100*ratio;//设置透明度 } }; 3、按CTRL+Enter测试,一个简单的3D旋转就形成了。 (至此为止,上面部分的教程很大程度上是参考《flash 3D 基础教程》(作者:zjs35 文章来源:flashempire 更新时间:2004-4-7)的,本人只在上面做了微小部分的修改,主要因为这篇对FLASH_3D效果的基础理论确实写的很好。修改的部分,是本人在学习之后,自己在实践练习中发现的一些需要注意的地方。) 接下来将为大家解析一篇某人大虾写的立方体旋转的FLASH_AS,这位大虾是用纯AS写的,只要把代码全部复制到第一桢就可以了。我将做详细的解析!!! //先给各项赋值,为后面的编辑作做准备 plane = [0, [0, 1, 2, 3, 4], [0, 5, 6, 7, 8], [0, 1, 2, 6, 5], [0, 2, 3, 7, 6], [0, 4, 3, 7, 8], [0, 1, 4, 8, 5]]; //给立方体的8个点都标上数,这里定义的数组是立方体的6个面,每个面上4个点,上面的数字就是哪四个点组成一个面,每组前面多个0,是为了下面做循环调用是方便,循环可以从i=1开始。大家自己可以根据上面的数组。画出它在三维坐标中的立体图形。另,第一“0“,其实是[0,0,0,0,0]。 dx = [0, 1, -1, -1, 1, 1, -1, -1, 1]; //这里是给8个点在三维坐标定义数组,竖着看,没一行就是一个点坐标的(x,y,z) ,另没组前面多个0,是为了下面做循环调用是方便,循环可以从i=1开始。 dy = [0, 1, 1, 1, 1, -1, -1, -1, -1]; // dz = [0, 1, 1, -1, -1, 1, 1, -1, -1]; // colour=0x4499FF //这里定义的是立方体的颜色,其实,要6个面,每个面的颜色不同,就把这个colour定义成数组就可以了。同样前面加个0,也是上面的理由。 //colour=[0,0x4499FF,0x6F13EC,0xF1F00E,0x6CE31C,0x26D9A3,0x808080]; trans = Math.PI/180; //下面的弧度和角度的转换用 cube_width = 100; //用于设定立方体的边的长度 d = 400; //// 观察者与屏幕的距离 num_planes = plane.length-1; //num_planes=6 num_nodes = dx.length-1; //num_nodes=8 num_nodes_per_plane = |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |
你可能对下面的文章感兴趣
上一篇: FLASH8新功能体验-裁切下一篇: Flash绘制精致图表:透明小球
关于FLASH_3D教程——从头开始的所有评论