《Direct3D场景中3D模型的处理方法.pdf》由会员分享,可在线阅读,更多相关《Direct3D场景中3D模型的处理方法.pdf(6页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第2 8 卷第4 期辽宁石油化工大学学报V o l。2 8N o 42 0 0 8 年1 2 月J O U R N A LO FL I A O N I N GU N I V E R S I T YO FP E T R O L E U M&C H E M I C A LT E C H N O I O G YD e c 2 0 0 8文蠢编号:1 6 7 2 6 9 5 2 f 2 0 0 8 0 4 一8 6 0 5D i r e c t 3D 场景中3 D 模型的处理方法桂圆园,侯彤璞+,郭艳霞(爱宇嚣澳织工夫学量 篝撬粤瀵痿王程学貔,辽宁援蹶1 1 3 0 0 1)摘要:介绍了在三维虚拟场景
2、中D i r e c t 3 D 调用3 D S M A X 制作完成的模型(实体)的方法,即如何通过D 3 D来运用3 D 作品。提出了3 D 实体的概念,研究了基于坐橼综合变换的模型加栽过程;重,点介绍了向薰的坐标变换以及。x 文件加戢过辑中确定3 D 模型的空间位置的方法;藏詹用程序再现了一个真安的场景。由于鹿D i r e c r t 3 D 中时3 D 模型的矩理务鳃褥毙较少,霹姥,弛研究毒一定的应粥徐馕。关篷镯;3 潞艇A X;3 D 摸鬣加栽;垒转变捷,D i r e c t 3 D中图分类母:T P l 8 3文献标识码:AD i s p o s a lM e t h o do
3、 f3 DM o d e l sU s e di nD i r e c t 3 DS c e n eD UY u a n-y u a n。H()UT o n g-p u,G U OY a n-x i a(S c h o o lo fC o m p u 鼯ra n dC o m m u n i c a t i o nE n g i n e e r i n g,L i a o n i n gU n i v e r s i t yo fP e t r o l e u m&C h e m i c a lT e c h n o l o g y。F u s h u nL i a o n i n g1 1
4、3 0 0 1。P R C h i n a)R e c e i v e d4S e p t e m b e r2 0 0 8;”v i s e d2 5O c t o b e r2 0 0 8;a c c e p t e d3 0O c t o b e r2 0 0 8A b s t r a c t:T h em e t h o do fI)i r e c t 3 Dc a l lt h em o d e l(e n t i t i e s),w h i c hi sc r e a t e db y3 D S M A Xi nav i r t u a lt h r e e d i m e n
5、s i o n a l(3 D)s c e n ew a si n t r o d u c e d,t h a ti s,h o wt or i s e3 Dw o r k sb yI)3D T h ec o n c e p to f3 De n t i t i e sw a sp r o p o s e da n dt h el o a d i n gp r o c e s so fr o o d e lw h i c hl sb a s e dO na ne o m p r e h e n s i v et r a n s f o r m a t i o no fe r d i n a t
6、 ew a ss t u d i e d T h et r a n s f o r m a t i o no fv m r-C O O r d i n a t ea n dm e t h o dt Od e t e r m i n et h e3 D m o d e l ss p a c el o c a t i o nd u r i n gp r o c e s so fl o a d i n g3 Dm o d e lw e】es p e c i a l l yi n t r o d u c e d,F i n a l l y,p r o c e d u r e sw e r eu s e
7、 dt or e p r o d u c ear e a l l i f es c e n e T h e3 Dm o d e l sh a n d l i n gi ss e l d o mi n t r o d u c e di nD i r e c r t 3 D,S Ot h i ss t u d yh a ss o m ev a l u eo fa p p l i c a t i o n K e yw o r d s:3 D S M A X 3 Dm o d u l eI o a d i n gC o o r d i n a t et r a n s f o r m a t i o
8、n!D i r e c t 3 D*C o r r e s p o n d i n ga u t h o r,T e l。:+8 6-4 1 3-6 8 6 5 1 3 2;f a x:+8 6 4 1 3 一S 8 6 0 7 6 6 I e-m a i l:h t p l 9 1 7 1 6 3。e o mO p e n G L 即开放性图形开发露,O p e n G L 是国际上公认的3 D 图形工业标准,它不仅加速了3 D 应用程序的开发,丽腿使应用程序可移植性更好。但爨在殍发交互式3 D 应用程序方麟,O p e n G I。存在鞠显酶零是:O p e n G L 与窗口系统戈荧,不
9、撵供任 嚣交互手段,必须有稷序员自己编写所有的交互功能#O p e n G L 编程接掰(A P I)是低级的C 函数,不提供哪复用(R e u s e)的对象库或者应用穗序框架,开发效率不高;缺乏对文字绘裁的缀好支梅u 。薅D i r e c t X 镌窥骏了这些阉簇,宅是一静圈澎波用程序接口,简单地说它是一个辅助软件,一个提黼系统性能的加造软件,由微软开发的心。D i r e e t3 D 是微软公司D i r e c t X S D K 集成开发羧稿嚣期:2 0 0 8 一一9 2佟者麓俞:拉嗣固 1 9 8 2 一),女,河藕傣定审,在读硕士*通讯联系套包中的重要部分,是基于微软的通用
10、对象模式C O M(C o m p o n e n tO b j e c tM o d e l)的3 D 图形A P I E 3】,通过这些C O M 对象,开发者可以在冤视设备差异的情瑟下访问底滋黪硬终,可以在隐藏特定硬俸缨节瓣情琵下诖程澎援去谤翔硬侮设备。微软称之为“硬 簪无关性”。因为D i r e e t 3 D 既具有硬件设备无关性叉支持硬件加速,因此成为三维图形程序设计的首选工具“。舞发任键兰维程序,都要涉及赘j 常复杂孵三维物俸数据模鍪,翔果直接蔫C b u i l d v e r t e x 类来橡造这些模型,照然是不合实际的,这些复杂的模型通常都是用专业的三维建模软件来制作,
11、例如3 D S M a x 和M a y a 等软件L 5】。这魃软件制作了模测之后霉用一些童爨或援俸将到箨好夔模壅文静转换成在D i r e c t 3 D 西缓直接使用静。X 文徉格式。在X文件中存储了三维模型的顶点坐标、颜色、法向量羊日万方数据万方数据第4 期牡园圊等D i r e c t 3 D 场景中3 D 模型的处骥方法纹理坐标等信息酗。每一个。x 文件就是一个实体。焱兰缝建摸蓬疆巾我们不霉襞怒整令寝羧凌暴郝建成一个。x 文件,遮榉对以后的场景管理会带来麻烦,因此我们用3 D S M a x 把场景中的模型根据需要建模,然后再重新组织成一个整体的虚拟场景。独嶷的模型会给场景管理带来
12、极大的方便,1 i i;在场景懿磐萋孛模型熬彼鬟确定是必不霹多酶,奉支重熹分析了模型位嚣的确定在编程中是如何实现的,丽猩D i r e e t 3 D 中没有直接提供一个憋体的处理方法。l三维实体建模1。l 实体由于在三位虚拟场景中涉及到的事物比较多,为了给以后的管璎锚来方便,将任何事物都统一成舷够一起管理的东鞭,以达到简化和方便程序设计瓣翅戆。在以羼昀稳建中辑有戆模溅籍称秀实瘁。1 2 实体的镄建首先定制环境,在W i n d o w sX P 下安装D i r e c t X9 0 S D K 开发工具,并确认在D 3 D 的插件工具里包禽一个e o n v 3 d s 转换器。D 3 D
13、 中一个3 D 物体键会了瑗点信息、糖震、黠囝,动裁竣鹣3 D 成磊被H 鹰骰m e s h 兹俸。e o n v 3 d s 裁是尾寒撼3 D 作品转换为标准m e s h 物体文件(*x)的工具。首先打开3 D S M a x(或M a y a 等其他3 D 软件,确保能导出脚D 能用的文件),根据需要制作我们想要的模型。遴过e o n v 3 d s 命令瘤3 d s 文孛争转换 l ;来,毽魏必须蓠先得蓟3 d s 文佟,然后逶过3 D S M a x 孛e x p o r t 命令导出。在菜单f i l e 中用e x p o r t 戏e x p o r ts e l e c t(
14、只导出所选物体)将其导出为*3 d s 文件。然后塌命令行方式运行c o n v 3 d s 把它转为*X。这样就餐了一拿霹用豹3 D 接品。黎-;k 的*。X 郝是二迸剡驰,这样写就生成文本式的*。x:c o n v 3 d s x*。X,用写字板形式戏其他形式打开,你会直接看到m e s h 物体的构成。X 文件的头信息:在x 文件的舞头一般有一个筒擎的文件信息:x o f 表明这是一令。X 文终;0 3 0 2 表示其叛本号,t x t 袭示其存綮静文件格式是文本格式其存储格式逐可以是二避铡方式,用b i n a r y 来波示;0 3 0 2 是3 2 位浮点数。如果是6 4 位就可以
15、用0 6 0 4 表示了#模檄定义:定义的每个模板都以关键字t e m p l a t e 开头。然后是模板名。每个定义魏摸棱郄莠一令G U I D 泼识臻该模菝豹唯一身份,模板是埘默嵌套的。模板一般分三种类趔:封闭式模板,开放式模板,限制式模板;数据对象:定义好模板之后再实例化,以存放实际数据。先是模板名,然翳懿实例名,实例名不是必须的,可以省略,然后就是存放实际数摄。文件的加载就楚黯数据酶识别驭瑟显示鑫囊蜜静场景。2坐标转换将3 d s 文件转换成*x 文件并不能直接实现粪实场景酶再现,必须把实体敦到场景中屋于自嚣秘位置。需要解决的就是实簿静位置、大夺秘方囱。要想确定模型的空间位置,只需确
16、定模型的中心搬标。在世界坐标系中,每一个坐标都可以看成一个标准向量。由于模型是一个整体,中心坐标的变化会弓|超整体变化。当溪D i r e c t 3 D 编程时,使餍毒垂矩阵来遴豁矩阵变换。使用4 4 矩阵是因为这样的大小能液现需要的所有变换,比如平移、投影、反射等“。蒋要使某一向量痧一(zYz1)平移,旋转,放缩可以通过下面酶变化蜜观:透过与F(多)蓬阵相乘把囱爨(z Y 鬈1)沿7 C 轴移动P。个单谴,漪Y 毒鸯穆囊P,个单位,沿z 轴移渤P。个单位l 通过与S(q)矩阵相黎把向量沿z 轴缩放q,个单位,沿y 轴缩放q,个单位,沿z 轴缩放口。个单位。f1000 1,。、0100 下(
17、孝)=l匕支o jS S e t T r a n s f o r m(D 3 D T S W O R L D,&t h i n g M a t l);p d 3 d D e v i c e 一 S e t T r a n s f o r m(D 3 D T S W O R L D,&t h i n g M a t l);g _ p M e s h-R e n d e r(p d 3 d D e v i c e);g _ p M e s h 是指向x 文件的一个指针,这样就把一个实体放在了世界坐标中。这是个非常简单的实例,没有用到矩阵的旋转和缩放。但是一般很多物体都需要进行这些变换,这个例子展示
18、了世界变换过程。3 2 实体的大小和方向关系当实体的位置确定后,根据场景需要来确定实体的大小和方向。例如要把某一实体X 文件放在(1,1,1)处,并且使其绕z,Y,z 轴分别旋转9 0。,扩大为原来的2 倍,即z,Y,2 坐标分别变为原来的2倍。首先定义D 3 D X M A T R I X A l 6,用于保存矩阵:D 3 D X M A T R I X A l 6m a t M o v m a t R o t a t i o n X m a t R o t a t i o n Y,m a t R o t a t i o n Z,m a t R o t a t i o n U s e r l
19、。m a t S c a l e,m a t;单位化每个矩阵,这为以后的编程带来了方便。D 3 D X M a t r i x l d e n t i t y(m a t R o t a t i o n X):D 3 D X M a t r i x l d e n t i t y(m a t R o t a t i o n Y):D 3 D X M a t r i x l d e n t i t y(m a t R o t a t i o n Z):D 3 D X M a t r i x l d e n t i t y(m a t R o t a t i o n U s e r l):D 3
20、D X M a t r i x l d e n t i t y(&m a t)iD 3 D X M a t r i x l d e n t i t y(m a t M o v)D 3 D X M a t r i x l d e n t i t y(8 L m a t S c a l e):保存每一个矩阵,代码如下:D 3 D X M a t r i x T r a n s l a t i o n(&m a t M o v。1 O f,1 O f,1 O f);D 3 D X M a t r i x R o t a t i o n X(8 L m a t R o t a t i o n X,D
21、3 D X P I 2);D 3 D X M a t r i x R o t a t i o n Y(&m a t R o t a t i o n Y,D 3 D X P I 2);D 3 D X M a t r i x R o t a t i o n Z(8 L m a t R o t a t i o n Z,D 3 D X 一0O015O0VO巾旧一九mmU一)32r;算计i U聃玎分万方数据万方数据第d 期牲同园等D i r e c t 3 D 场景中3 D 模型的处煺方法8 9P I 2);D 3 D X M a t r i x S c a l i n g(8 L m a t S c
22、a l e,0 2 f,0 2 f,0。2 f);M a t=m a t M o v*m a t R o t a t i o n X*m a t R o t a t i o n Y*m a t R o t a t i o n Z*m a t S c a l eI D i r e c t 3 D D e v i c e 9*p d 3 d D e v i e e p d 3 d D e v i c e 是D X 设备p d 3 d D e v i c e-S e t T r a n s f o r m(D 3 D T S W O R L D,M a t):g _ p M e s h-R e n
23、d e r(p d 3 d D e v i c e);通过以上代粥达到了目的,如果想让实体绕某一渤量(2。03 05 O)旋转若干度(9 0。),代码实现灸:、D 3 D X M a t r i x R o t a t i o n A x i s(m a t R o t a t i o n U s e r l,&D 3 D X V E C T O R 3(2 O f,3 O f,5 O f),D 3 D X _ P I 2)p d 3 d D e v i c e 一 S e t T r a n s f o r m(D 3 D T S W O R L D,&m a t R o t a t i o
24、 n U s e r l)lg _ p M e s h-R e n d e r(p d 3 d D e v i c e)l不难看出,遴过矩阵链接给编稷带来了很大酶方便。3 3 多实体场景的实现实体在场景巾的具体位置大小方向已经确定,懿要实凌真实场黎瓣粪实霉理,灵鸯这些逐是不够辩。D 3 D 支持。x 梭塑文件,x 文辞包括模型数据,如v e r t e x b u f f e r,i n d e x b u f f e r,以及材质等信息。而腮材质信息还可能包括纹理等信息。必须从x 文件中读取网格(M e s h)并且将它们像稃至内存,同时设鬟羲穗丞数,橱擒趱数震来释放裁掇鬓鑫畜豹痰存。渲染模
25、块会告诉你怎样渲染嘲穰(M e s h),渲染模型即将模型从设备输出出去。在加载过程重创建了两个数组,分别用于保存模型的材质和纹理。然艏会有一个循环,其实它的功能就怒从文件(由x文绛绘定 孛读玻纹理势镲存囊数缀审。在辑梅函数中,必须释藏瞬格稚纹瑾占拜 的内存,渲染模块用来循环的处理网格的每个子集,并且用适当的纹理和材质渲染它们。下面是加载一个实体的具体过瓣:L P D I R E C T 3 D 9g _ p D 3 D=N U L L;D i r e e t 3 D 对象L P D I R E C T 3 D D E V I C E 9g p d 3 d D e v i c e=N U L
26、L;D i r e c t 3 D 设备埘象L p D G D X M E S Hg p M e s h=N U L L)网格模型瓣襞D W O R Dg _ d w N u m M a t e r i a|s=0;网格模壁材麟数量首先从磁盘文件加载网格模型,用D 3 D X L o a d M e s h F r o m X 函数来完成把网格载入内存的工作。D 3 D X L o a d M e s h F r o m X L”a i r p l a n e。x”D 3 D X M E S H M A N A G E D,g p d 3 d D e v i c e。N U L L,p D 3
27、 D X M t r l B u f f e r,N U L L,g d w N u m M a t e r i a l s,&g _ p M e s h)l然后从网格模型中提取材璇属牲和纹理文件名。D 3 D X M A T E R l A L*d 3 d x M a t e r i a l s一(D 3 D X M A T l R I A L*)p D 3 D X M t r l B u f f e r 一:G e t B u f f e r P o i n t e r();g-p M e s h M a t e r i a l s n e wD 3 D M A 靶R I A L 9 g
28、d w N u m M a t e r i a l s l依次逐块掇敢黼格文件名。f o r(D W O R Di 一0;i 0)W C H A Rf i l e n a m e 2 5 6 ;获取纹理文件名R e m o v e P a t h F r o m F i l e N a m e(d 3 d x M a t e r i a l s i p T e x t u r e F i l e n a m e,f i l e n a m e);当模型耪璇属性和纹理读取完后开始渲染场景,其渲染过程如下:由于是逐蚨读取所以也必须逐块渲染网格模缴。f o r(D W O R Di 一0;i S e
29、 t M a t e r i a l(g p M e s h M a t e r i a l s i );g p d 3 d D e v i c e S e t T e x t u r e 0,g p M e s h T e x t u r e s i );g _ p M e s h-D r a w S u b s e t(i),渲染模型至此x 文件加载完毕。通过上面的处理,图像裁霹瑷显示窭寒了。但在程穿瓣簸嚣必矮强薮器玻网格和纹瑾占髑的内存。努了使蜜体看起来更细纛实,必须加上灯光,视图矩阵和投影矩阵。如果缩放了网格,同时也缩放了法线。这W 能会使你的对搬着起来发暗,解决的办法是激活D 3 D
30、 R S 万方数据万方数据辽宁石油化工大学学报第2 8 卷N O R M A L I Z E N O R M A L S 渲染状态。p D 3 D D e v i c e 一 S e t R e n d e r S t a t e(D 3 D R S N o R M A L I Z E N O R M A L S,T R U E);下面是通过程序实现的真实场景。网1 是未经添加实体的空旷房间,图l未经添加实体的空旷房间图2 是通过加载x 文件(会议桌,椅子,植物,沙发),确定不同实体的位置或相同实体的不同位置,把它们放在了合理的伉置。图2 加载x 文件后的房间通过3 D S M A X 建造的
31、3 D 模型得到的x 文件,经过一系列的转换正确加载后可以得到十分逼真的动画效果,可以很好的应用于虚拟场景,例如三维建筑系统,仓库管理系统等。参考文献于忠德D i r e c t X 实时渲染技术详解V M 重庆:重庆出版社,2 0 0 6 童晓然,昊晟用D i r e c t X 实现地图3 D 展示及模拟行走 J 科技广场,2 0 0 7(1):1 1 7-1 1 9 任咏林,任伟林,秦魁基于M i c r o s o f tD i r e c t X 浅析C O M 组件与多媒体游戏的开发 J 北京工商大学学报,2 0 0 5,2 3(6):3 8 4 Z J i mA d a m s
32、A d v a n c e da n i m a t i o nw i t hd i r e c t X M T h o m s o n:P u b l i s h e db yt h o m s nl e a r n i n g,2 0 0 2 叶至军,于忠德D i r e e t X 宾时渲染技术详解E M 重庆:重庆大学出版社,2 0 0 6 王德才精通D i r e e t X 3 D 图形与动画程序设计E M 北京:人民邮电出版社,2 0 0 7 金纯x 文件的解读和处理 J 福建电脑,2 0 0 5(9):6 8 6 9 金采工作室3 D 游戏程序设计基础E M 3 北京;北京希望
33、电子出版社,2 0 0 6 王德才,张安慧D i r e c t 3 D 中的三维坐标变换 J 电脑编程技巧与维护,2 0 0 7(5):4 6(E d:Z W,Z)叫跚嘲刚嘲网吲嘲嘲万方数据万方数据Direct3D场景中3D模型的处理方法Direct3D场景中3D模型的处理方法作者:杜园园,侯彤璞,郭艳霞,DU Yuan-yuan,HOU Tong-pu,GUO Yan-xia作者单位:辽宁石油化工大学计算机与通信工程学院,辽宁抚顺,113001刊名:辽宁石油化工大学学报英文刊名:JOURNAL OF LIAONING UNIVERSITY OF PETROLEUM&CHEMICAL TEC
34、HNOLOGY年,卷(期):2008,28(4)被引用次数:2次 参考文献(9条)参考文献(9条)1.任咏林;任伟林;秦勉 基于Microsoft DirectX浅析COM组件与多媒体游戏的开发期刊论文-北京工商大学学报2005(06)2.童晓然;吴晟 用DirectX实现地图3D展示及模拟行走期刊论文-科技广场 2007(01)3.于忠德 DirectX实时渲染技术详解 20064.王德才;张安慧 Direct3D中的三维坐标变换期刊论文-电脑编程技巧与维护 2007(05)5.金禾工作室 3D游戏程序设计基础 20066.金纯 x文件的解读和处理期刊论文-福建电脑 2005(09)7.王德
35、才 精通DirectX3D图形与动画程序设计 20078.叶至军;于忠德 DirectX实时渲染技术详解 20069.Jim Adams Advanced animation with directX 2002 本文读者也读过(10条)本文读者也读过(10条)1.童晓然.吴晟.Tong Xiaoran.Wu Sheng 用DirectX实现地图3D展示及模拟行走期刊论文-科技广场2007(1)2.盛磊.于晓波.SHENG LEI.YU XIAOBO 用Direct3D描绘运动物体的轨迹期刊论文-微计算机信息2007,23(34)3.王映辉 3D建模与编程技术期刊论文-计算机应用研究2004,2
36、1(1)4.张钧.吴云东.张强.王慧.ZHANG Jun.Wu Yun-dong.ZHANG Qiang.WANG Hui 利用Direct3D的地形三维快速重建方法期刊论文-海洋测绘2005,25(3)5.周演.陈天滋.ZHOU Yan.CHEN Tian-zi 基于Direct3D的大规模地形渲染技术研究期刊论文-郑州轻工业学院学报(自然科学版)2008,23(6)6.张小超.王精业.梁强.ZHANG Xiao-chao.WANG Jing-ye.LIANG Qiang 基于Direct3D的虚拟战场环境中动态地形的实现方法期刊论文-系统仿真学报2005,17(5)7.商书元.张军.李柯.
37、冯振声 基于DirectX的可视化仿真系统期刊论文-军械工程学院学报2002,14(1)8.韩振东.张军.蒋涛.HAN Zhen-dong.ZHANG Jun.JIANG Tao 基于Direct3D多分辨率地形建模方法的研究期刊论文-测绘科学2006,31(6)9.刘维华.张尤赛.王敏.NET框架下Direct 3D程序的快速开发期刊论文-电脑开发与应用2004,17(12)10.曹彩霞.张立勋.杨双华.王以伦.CAO Cai-xia.ZHANG Li-xun.YANG Shuang-hua.WANG Yi-lun 用Direct3D结合3DS MAX实现动画技术期刊论文-应用科技2000,27(12)引证文献(2条)引证文献(2条)1.熊伟 基于IoC模式的D3D渲染工作流引擎设计期刊论文-孝感学院学报 2010(6)2.郭艳霞.侯彤璞.杜园园 基于DirectX的三维场景实体的拾取期刊论文-辽宁石油化工大学学报 2009(3)本文链接:http:/