3D盒子
作者 佚名技术
来源 服务器技术
浏览
发布时间 2012-07-12
ateEmptyMovieClip("TextureLayer",2); for(var i in Rectlist){ //贴图绑定 Rectlist[i].actable=true; //并且通过检测这个变量,做到尽量不执行AS var Texturenow=Texturelayer.createEmptyMovieClip("套子"+i,i); //.............................................................. Rectlist[i].texture2=[]; //"texture2[]"用于指向这个面的4个三角形 for(var j=0;j<4;j++){ //将每个面分割为4个三角形(上-右-下-左) var Texturenow2=Texturenow.createEmptyMovieClip("三角图"+i+"_"+j,(i+1)*(j+1)); //Texturenow2.j=j;//j为0-1-2-3,分别对应于四个三角形:0上-1右-2下-3左 var pic=Texturenow2.createEmptyMovieClip("pic",0); //----------建立三角形遮罩------- var maskMC=pic.createEmptyMovieClip("遮罩",1); maskMC.lineStyle(0,0); maskMC.beginFill(0); maskMC.moveTo(2,2); maskMC.lineTo(-100,0); maskMC.lineTo(0,-100); maskMC.lineTo(1,1); maskMC.endFill(); var maskedMC=pic.attachMovie(Rectlist[i].pp_name,"pic00",0);//贴上原始图片 maskedMC._rotation=-45-90*j;//原始图片旋转到指定角度 maskedMC.setMask(maskMC); //------------end--------------- Texturenow2._visible=0; Rectlist[i].texture2[j]=Texturenow2; } //............................................................. //Texturenow._visible=0; //移出屏幕 //Texturenow._alpha=50; Rectlist[i].texture=Texturenow;//"texture"用于指向这个面的整个图形 } //----------------------------------------------------------------------------------------------- // 渲染函数 // ====================将正方形的MC贴到任意平行四边形==================================== function renderTriTexture(va, vb, vc, textureMC){ var Rander=false; //a、c相对b的坐标(a,b) (c,d) var a=va.vx-vb.vx var b=va.vy-vb.vy var c=vc.vx-vb.vx var d=vc.vy-vb.vy //检验表面方向,如果顶点A、B、C旋向为逆时针则为正面 if (a<0&&d>=c*b/a) Rander=true; else if (a>0&&d<=c*b/a) Rander=true; else if (a==0){ if (b>0&&c>=0) Rander=true; if (b<=0&&c<0) Rander=true; } //第三步把图形逆时针转动角Angle3 = 0.5 * arctg( 2(ab+cd) / bb+dd-aa-cc ) if(Rander){ var Angle3=0.5*Math.atan(2*(a*b+c*d)/(b*b+d*d-a*a-c*c)); if (!isFinite(Angle3)) Angle3=1.5707963267949 var cosAngle3=Math.cos(Angle3); var sinAngle3=Math.sin(Angle3); //第二步的结果设为(Xa,Ya) ,(0,0) , (Xc,Yc),就是将最终显示顺时针转动Angle3 var Xa=a*cosAngle3-b*sinAngle3; var Ya=a*sinAngle3+b*cosAngle3; var Xc=c*cosAngle3-d*sinAngle3; var Yc=c*sinAngle3+d*cosAngle3; //要注意某数为0的错误 if(Xa==0&&Xc==0||Ya==0&&Yc==0){ rander=false; }else if (Yc!=0&&Ya!=0){ var scale=Xa/Yc; //横纵相对缩放率 var reallength=Math.sqrt(Xc*Xc+Yc*Yc*scale*scale)//正方形整体拉伸之后边长 var xscale=reallength/100; //第二步要设置的贴图的_xscale var yscale=reallength/100*Yc/Xa //和_yscale //第一步图形顺时针旋转Angle1 var Angleco=180/Math.PI; //弧度->角度转换系数 if ((Ya/scale)<=0) var Angle1=90-Math.atan(Xa/Ya/scale)*Angleco else if ((Ya/scale)>0) var Angle1=270-Math.atan(Xa/Ya/scale)*Angleco }else if(Ya==0){ var xscale=Xa/100; var yscale=Yc/100; Angle1=180 }else if(Yc==0){ var xscale=Xc/100; var yscale=Ya/-100; Angle1=90; } } //开始贴图 //------------------------------------- if(Rander){ textureMC._visible=1; textureMC._x=CameraCenterX+vb.vx; textureMC._y=CameraCenterY+vb.vy; textureMC._xscale=100*xscale; textureMC._yscale=100*yscale; texture |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |
你可能对下面的文章感兴趣
上一篇: 如何屏遮Flash中的"设置""关于"下一篇: 纯脚本制作的满天飞舞
关于3D盒子的所有评论