3D盒子
作者 佚名技术
来源 服务器技术
浏览
发布时间 2012-07-12
点击浏览该文件 点击浏览该文件 前几天参考了ox的贴子,总算弄出来了,用了好多ox的东西。。。呵呵 http://bbs.Flashempire.net/showthread.PHP?t=183141&page=2 上面这个就是ox在闪帝的长篇大补贴,讨论3D贴图的 很早就看过“小小”做的3D烟盒,很想自己也做个,于是开始学习3D方面的东西, 但是进展很慢,而且断断续续的,在参考了很多源代码之后,终于弄出了个 3D球棍模型http://www.5dblog.com/user2/jh7086/index.ASP?id=19656 空间点的基本变换和简单消隐算是搞懂些了,但是还是没弄出贴图来,想到“小小” 的贴图是将图片分割成三角形的,于是我以为,只要能将一个三角形的图片进行 任意的变换UploadFile/2004-11/20041125201957997.swf 就可以贴图了,但是“小小”为什么把每个面分割成4个三角形,而不是2个呢, 直到那天看了ox的帖子才明白:贴图并不是简单的顶点坐标映射,要做真正的 透视贴图,必须按像素级别切割图片,这在Flash里是不现实的,“小小”的每个面 是用4个三角形平行透视后拼成的(不知道为什么会想到要这样做) 楼下的代码中最关键的就是将正方形的MC贴到任意平行四边形那一段,我是直接 引用了ox所写的函数,只做了些小的改动,里面的数学计算和三角形任意变形应该 是相同的(我没具体研究过ox是如何计算的),因为它们的实质都是解决这样一个问题: 已知平面上三个原始点a(ax,ay);b(bx,by);c(cx,cy)和三个目标点d(dx,xy);e(ex,ey);f(fx,fy) 要求通过“平移,缩放,旋转”3种变换的组合来使abc在经过同样的变换后,对应地变成 def。。。 这是我以前建立的方程 点击浏览该文件(将c点和f点都放在原点,只考虑通过缩放1+旋转+缩放2的步骤将ab变换到de),方程是解出来了,但是有很多限制条件,于是就卡住了 而ox的方法似乎是用逆推 //------------------------------------------------------------------------------------------------------------ // 平行****引擎 // vol 0.03 // 初步完成映射贴图 // 上下左右、PageUp、PageDown旋转画面 //------------------------------------------------------------------------------------------------------------ // 初始化 //坐标:垂直屏幕的方向为z坐标 //顶点表 dot=[]; //平行四边形表,需要三个顶点(第四个顶点由其他3个计算出来)和一个贴图信息,顶点va\VB\vc绕向顺时针为正 Rectlist=[]; CameraCenterX=275; //镜头中心x/y CameraCenterY=200; NotRanderPosX=-100000; //把所有不渲染的贴图_x移到这个位置 //开始画一个方形盒子,他有8个顶点,6个面 dot[0]={x:-100,y:50,z:-100};//左下前 dot[1]={x:100,y:50,z:-100};//右下前 dot[2]={x:100,y:-50,z:-100};//右上前 dot[3]={x:-100,y:-50,z:-100};//左上前 dot[4]={x:-100,y:50,z:100};//左下后 dot[5]={x:100,y:50,z:100};//右下后 dot[6]={x:100,y:-50,z:100};//右上后 dot[7]={x:-100,y:-50,z:100};//左上后 Rectlist[0]={va:dot[0],vb:dot[1],vc:dot[2],vd:dot[3],pp_name:"pp_021"}; //前面 Rectlist[1]={va:dot[5],vb:dot[4],vc:dot[7],vd:dot[6],pp_name:"pp_022"}; //后面 Rectlist[2]={va:dot[3],vb:dot[2],vc:dot[6],vd:dot[7],pp_name:"pp_023"}; //上面 Rectlist[3]={va:dot[0],vb:dot[4],vc:dot[5],vd:dot[1],pp_name:"pp_024"}; //下面 Rectlist[4]={va:dot[4],vb:dot[0],vc:dot[3],vd:dot[7],pp_name:"pp_025"}; //左面 Rectlist[5]={va:dot[1],vb:dot[5],vc:dot[6],vd:dot[2],pp_name:"pp_026"}; //右面 //初始化贴图 //所有贴图都必须是100*100的正方形,所有贴图放在"TextureLayer"里面 this.cre |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |
你可能对下面的文章感兴趣
上一篇: 如何屏遮Flash中的"设置""关于"下一篇: 纯脚本制作的满天飞舞
关于3D盒子的所有评论