收藏九域天地
九域天地友情链接
九域天地留言本
九域天地站点地图
      西安九域天地设计咨询网-VI/CI标志设计免费教程|平面广告设计教学文章|西安展示设计教程下载|室内装饰设计教程下载|多媒体动画制作在线教程文章|西安网站设计制作教程文章|招贴海报论坛教程|西安软件包装设计教程文章|西安展厅效果图设计教程|西安服装设计教程文章|西安公司标志设计|中国西安设计
   
西安九域天地设计咨询网-VI/CI标志设计免费教程|平面广告设计教学文章|西安展示设计教程下载|室内装饰设计教程下载|多媒体动画制作在线教程文章|西安网站设计制作教程文章|招贴海报论坛教程|西安软件包装设计教程文章|西安展厅效果图设计教程|西安服装设计教程文章|西安公司标志设计|中国西安设计
    当前位置:首页->设计相关->教程文章->多媒体设计文章    
   
 
西安九域天地设计咨询网-VI/CI标志设计免费教程|平面广告设计教学文章|西安展示设计教程下载|室内装饰设计教程下载|多媒体动画制作在线教程文章|西安网站设计制作教程文章|招贴海报论坛教程|西安软件包装设计教程文章|西安展厅效果图设计教程|西安服装设计教程文章|西安公司标志设计|中国西安设计
九域天地设计新闻
九域天地动向
设计相关文章
 
 
 
 
 
 
标志VI设计教程
Flash MX 编程深层次应用-高级特效(7)

3.3 虚幻特效(7)


3.3.3 3D物体的旋转
Flash是一个二维的动画软件,不具有3D的作图功能,但是3D物体才具有现实的真实效果,于是3D动画变得非常迫切。Macromedia公司至今为止还没有为Flash加上3D功能,因而3D的实现只能通过编程或者其他软件生成之后再导入这两种方法了。下面就讲讲在Flash中如何通过3D编程让一个正方形方块产生旋转。如图3-16所示。

 

图3-16

这是个从箭头方向看过去的3D正方形,为了让读者看清这个效果,把颜色设成了透明,很明显远处的面小,近处的面大。请注意每个点都有一个编号,以示区别,下面就是具体程序:

function init() {

_root.createEmptyMovieClip("pad", 1);

pad._x = 270;

pad._y = 200;

}

ya = Math.PI;

fl = 200;

//这里的(x,y,z)代表一个点,这里共有8个点,其排列顺序见前面的图

x = new Array(-100, 100, 100, -100, -100, 100, 100, -100);

y = new Array(-100, -100, 100, 100, -100, -100, 100, 100);

z = new Array(-100, -100, -100, -100, 100, 100, 100, 100);

xp = new Array();

yp = new Array();

function square(x1, y1, x2, y2, x3, y3, x4, y4, col) {

//这个函数是画一个多边形,其填充是用50的透明度

pad.beginFill(col, 50);

pad.lineStyle(1, 0, 100);

pad.moveTo(x1, y1);

pad.lineTo(x2, y2);

pad.lineTo(x3, y3);

pad.lineTo(x4, y4);

pad.lineTo(x1, y1);

pad.endFill();

}

_root.onEnterFrame = function() {

init();

cosxa = Math.cos(xa);

sinxa = Math.sin(xa);

cosya = Math.cos(ya);

sinya = Math.sin(ya);

xa += pad._ymouse/1000;

ya += pad._xmouse/1000;

for (i=0; i<8; i++) {

//将原始的坐标通过旋转、透视投影后产生新坐标点

ypt = cosxa*y[i]-sinxa*z[i];

zpt = cosxa*z[i]+sinxa*y[i];

xpt = cosya*x[i]-sinya*zpt;

zpt = cosya*zpt+sinya*x[i];

scale = fl/(fl+zpt+200);

xp[i] = xpt*scale;

yp[i] = ypt*scale;

}

square(xp[0], yp[0], xp[1], yp[1], xp[2], yp[2], xp[3], yp[3], 0xff0000);

square(xp[0], yp[0], xp[3], yp[3], xp[7], yp[7], xp[4], yp[4], 0x00ff00);

square(xp[4], yp[4], xp[5], yp[5], xp[6], yp[6], xp[7], yp[7], 0x0000ff);

square(xp[1], yp[1], xp[2], yp[2], xp[6], yp[6], xp[5], yp[5], 0xff00ff);

square(xp[0], yp[0], xp[1], yp[1], xp[5], yp[5], xp[4], yp[4], 0xffff00);

square(xp[2], yp[2], xp[3], yp[3], xp[7], yp[7], xp[6], yp[6], 0x00ffff);

};

_root.onMouseDown = function() {

_root.draw = true;

};

_root.onMouseUp = function() {

_root.draw =

}

这段程序中最关键部分就是求xpt,ypt,zpt的部分,它是通过一个转换矩阵得出来的公式,由于其变换复杂、深奥难懂,在这里就不作详细的介绍了,有关内容请参考清华大学出版社的《计算机图形学》一书。在这里fl是透视点的距离,也就是当用来透视的距离越远时,看到的就越没有透视效果(可以按远小近大效果来理解)。


 

 第 034 篇  首篇 上一篇 下一篇 返回 
 
 
 
 
  西安九域天地设计咨询网-平面广告设计、VI/CI设计、 室内装饰设计、多媒体动画制作、网站设计制作、招贴海报设计、软件包装设计、展厅效果图设计、公司标志设计 中国西安设计  
九域天地自助链接   九域天地友情链接   九域天地创作团队   九域天地人才招聘   九域天地联系方式   九域天地在线咨询
西安九域天地设计咨询网-VI/CI标志设计免费教程|平面广告设计教学文章|西安展示设计教程下载|室内装饰设计教程下载|多媒体动画制作在线教程文章|西安网站设计制作教程文章|招贴海报论坛教程|西安软件包装设计教程文章|西安展厅效果图设计教程|西安服装设计教程文章|西安公司标志设计|中国西安设计
 
九域天地联系电话   写信给九域天地
 
多媒体设计教程 网站设计教程 平面广告设计教程 环境装饰设计教程 界面创意设计教程