3D盒子
作者 佚名技术
来源 服务器技术
浏览
发布时间 2012-07-12
MC.pic._rotation=Angle1; textureMC._rotation=-1*Angle3*Angleco }else{ textureMC._visible=0; } } //===========================end======================================= // //=========================透视贴图映射================================= function FillTexture(){ for(var i in Rectlist){ var Rectnow=Rectlist[i]; if (Rectnow.actable){ //如果这个面允许渲染 //计算这个面的几何中心的屏幕坐标 var vo={},va={},vb={},vc={}; vo.x=(Rectnow.va.x+Rectnow.vc.x)/2; vo.y=(Rectnow.va.y+Rectnow.vc.y)/2; vo.z=(Rectnow.va.z+Rectnow.vc.z)/2; vb=getOne_toxy(V_d,vo); for(var j=0;j<4;j++){ var textureMC=Rectnow.texture2[j]; switch (j) { //0上--1左--2下--3右 case 0 : va=Rectnow.va; vc=Rectnow.vb; break; case 1 : va=Rectnow.vb; vc=Rectnow.vc; break; case 2 : va=Rectnow.vc; vc=Rectnow.vd; break; case 3 : va=Rectnow.vd; vc=Rectnow.va; break; } renderTriTexture(va, vb, vc, textureMC); } } } } //===========================end======================================= // // 面排序 function SortPolygon(){ for(var i in Rectlist){ var Rectnow=Rectlist[i]; Rectnow.texture.swapDepths(i-10*(Rectnow.va.z+Rectnow.vc.z)); } } // 线框渲染 function RanderByLine(){ createEmptyMovieClip("linelayer",100); linelayer._x=CameraCenterX; linelayer._y=CameraCenterY; linelayer.lineStyle(1,0x504040); for(var i in Rectlist){ if (!Rectlist[i].actable) continue; var Rectnow=Rectlist[i] linelayer.moveTo(Rectnow.va.vx,Rectnow.va.vy); linelayer.lineTo(Rectnow.vb.vx,Rectnow.vb.vy); linelayer.lineTo(Rectnow.vc.vx,Rectnow.vc.vy); linelayer.lineTo(Rectnow.vd.vx,Rectnow.vd.vy); linelayer.lineTo(Rectnow.va.vx,Rectnow.va.vy); } } //----------------------以上部分为ox老大所作----------------------------- //----------------------以下部分是自己抄来的------------------------------- //3d变换部分的函数 // // 单个空间点旋转变换,xa,ya,za均为角度值,dotArray为存储点集的数组名,num为需要操作的空间点的编号 function dot_rotate(xa, ya, za, dotArray,num) { var rad = Math.PI/180; xa *= rad; ya *= rad; za *= rad; var sin_xa = Math.sin(xa); var cos_xa = Math.cos(xa); var sin_ya = Math.sin(ya); var cos_ya = Math.cos(ya); var sin_za = Math.sin(za); var cos_za = Math.cos(za); var px, py, pz, tempx, tempy, tempz; px = dotArray[num].x; py = dotArray[num].y; pz = dotArray[num].z; tempx = (pz*cos_xa)-(py*sin_xa); tempy = (px*cos_ya)-(pz*sin_ya); tempz = (py*cos_za)-(px*sin_za); // // dotArray[num].x = (py*sin_za)+(px*cos_za); dotArray[num].x = (py*sin_za)+(tempy*cos_za); dotArray[num].y = (pz*sin_xa)+(tempz*cos_xa); // dotArray[num].z = (pz*cos_xa)-(tempz*sin_xa); dotArray[num].z = (px*sin_ya)+(tempx*cos_ya); // // } //整个点集的旋转变换:xa,ya,za均为角度值,dotArray为存储点集的数组名 function dot_rotateAll(xa, ya, za, dotArray) { for(var i in dotArray){ dot_rotate(xa, ya, za, dotArray,i); } } //将单个空间点****投影到xy平面,d为视点到投影面的距离,dot为需要作****投影的点 function getOne_toxy(d,dot) { var k = 1-dot.z/d; dot.vx = dot.x/k; dot.vy = -dot.y/k; return dot; } // 将空间点集透视投影到xy平面,d为视点到投影面的距离,dotArray为存储点集 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |
你可能对下面的文章感兴趣
上一篇: 如何屏遮Flash中的"设置""关于"下一篇: 纯脚本制作的满天飞舞
关于3D盒子的所有评论