快速业务通道

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 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号