Direct3D场景中3D模型的处理方法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

COOrdinate and method tO determine the 3Dmodel's space location during process of loading 3D model we】/'e specially introduced,
Finally,procedures were used to reproduce a real—life scene.The 3D model's handling is seldom introduced in Direcrt3D,SO
舞发任键兰维程序,都要涉及赘j}常复杂孵三 维物俸数据模鍪,翔果直接蔫Cbuildvertex类来橡 造这些模型,照然是不合实际的,这些复杂的模型通 常都是用专业的三维建模软件来制作,例如 3DSMax和Maya等软件L5】。这魃软件制作了模测 之后霉用一些童爨或援俸将到箨好夔模壅文静转换 成在Direct3D西缓直接使用静。X文徉格式。在.X 文件中存储了三维模型的顶点坐标、颜色、法向量羊日
标准向量。由于模型是一个整体,中心坐标的变化 会弓|超整体变化。
当溪Direct3D编程时,使餍毒×垂矩阵来遴豁
矩阵变换。使用4×4矩阵是因为这样的大小能液
现需要的所有变换,比如平移、投影、反射等[“。蒋
要使某一向量痧一(z Y z 1)平移,旋转,放缩可以通 过下面酶变化蜜观:透过与F(多)蓬阵相乘把囱爨
(zY鬈1)沿.7C轴移动P。个单谴,漪Y毒鸯穆囊P,个
单位,沿z轴移渤P。个单位l通过与S(q)矩阵相黎
把向量沿z轴缩放q,个单位,沿y轴缩放q,个单 位,沿z轴缩放口。个单位。
f 1 0 0 01
,下,(。孝 、 )=l{0

0 0{
匕£支oj
吼0 0 0
0 g, 0 0
S<譬)一

0 散0


(3D)scene was introduced,that is,how to rise 3D works by I)3D.The concept of 3D entities was proposed and the loading
process of roodel which ls based On an eomprehensive transformation of e∞rdinate was studied.The transformation of v∞mr--
桂圆园,侯彤璞+,郭艳霞
(爱宇嚣澳织工夫学量}篝撬粤瀵痿王程学貔,辽宁援蹶113001)
摘要:介绍了在三维虚拟场景中Direct3D调用3DSMAX制作完成的模型(实体)的方法,即如何通过D3D 来运用3D作品。提出了3D实体的概念,研究了基于坐橼综合变换的模型加栽过程;重,点介绍了向薰的坐标变换以
Received 4 September 2008;”vised 25 October 2008;accepted 30 October 2008
万方数据 Abstract:The method of I)irect3D call the model(entities),which is created by 3DSMAX in a virtual three—dimensional
以省略,然后就是存放实际数摄∽。文件的加载就 楚黯数据酶识别驭瑟显示鑫囊蜜静场景。
2 坐标转换
将3ds文件转换成*.x文件并不能直接实现 粪实场景酶再现,必须把实体敦到场景中屋于自嚣
秘位置。需要解决的就是实簿静位置、大夺秘方囱。
要想确定模型的空间位置,只需确定模型的中心搬
标。在世界坐标系中,每一个坐标都可以看成一个
在本地空间中的物体通过世界变换(world transform)的过程被变换到世界空间中。世界变换 通常是用平移、旋转、缩放操作来设置模型在世界中
的位置、大小、方向。世界变换就是设置在世界中的 各物体彼此的位置、大小和方向关系。世界变换由 一个矩阵表示。并且在Direct3D中调用 Direct3DDevice9::SetTransform方法设置它,记住 将转换类型设为D3DTS—WORLD。例如要在世界 坐标系中放置一个由.x文件生成的椅子定位在(一 3 2 6),程序实现如下: D3DXMATRIX thingMatl: D3DXMatrixTranslation(&thingMatl,一3.0f,2.
this study has some value of application. Key words: 3DSMAX}3D module Ioading
Coordinate transformation!Direct3D
*Corresponding author,Tel。:+86--413--6865132;fax:+86—413一S860766Ie--mail:htpl917@163。eom
DU Yuan--yuan。H()U Tong--pu’,GUO Yan--xia
(School of Compu鼯r and Communication Engineering,Liaoning University of Petroleum&Chemical Technology。
Fushun Liaoning 113001。P.R.China)
3 实体的位置确定
3.1单个实体的位置 由于整个虚拟场景中的实体已被分解成不同
的.x文件,因此在写程序时需要把场景中的实体放 到合适的位置。一旦构造了某种模型,他们都在自 己的坐标系中,但需要把他们放到同一个世界坐标 系中[…。本地空间又叫建模空间(还可叫做自身坐 标系),这是建模的坐标系。本地空间简化了建模的 过程。在物体自己的坐标系中建模比在世界坐标系 中直接建模更容易。在本地空间中允许构造一个模 型而不必考虑物体在世界中相对于其他物体的位 置、大小和方向关系。
薅DirectX镌窥骏了这些阉簇,宅是一静圈澎 波用程序接口,简单地说它是一个辅助软件,一个提 黼系统性能的加造软件,由微软开发的心]。
Direet 3D是微软公司DirectXSDK集成开发
羧稿嚣期:2008一§§一92 佟者麓俞:拉嗣固<1982一),女,河藕傣定审,在读硕士. *通讯联系套.
包中的重要部分,是基于微软的通用对象模式COM (Component Object Model)的3D图形APIE3】,通过 这些COM对象,开发者可以在冤视设备差异的情 瑟下访问底滋黪硬终,可以在隐藏特定硬俸缨节瓣 情琵下诖程澎援去谤翔硬侮设备。微软称之为“硬{簪 无关性”。因为Direet3D既具有硬件设备无关性叉 支持硬件加速,因此成为三维图形程序设计的首选 工具‘“。
键万会方了数瑗点 据信息、糖震、黠囝,动裁竣鹣3D成磊被
H鹰骰mesh兹俸。eonv3ds裁是尾寒撼3D作品转换 为标准mesh物体文件(*.x)的工具。首先打开 3DSMax(或Maya等其他3D软件,确保能导出 脚D能用的文件),根据需要制作我们想要的模型。 遴过eonv3ds命令瘤3ds文孛争转换{l{;来,毽魏必须 蓠先得蓟3ds文佟,然后逶过3DSMax孛export命 令导出。在菜单file中用export戏export select (只导出所选物体)将其导出为*.3ds文件。然后 塌命令行方式运行conv3ds把它转为*.X。这样就 餐了一拿霹用豹3D接品。黎-;k的*。X郝是二迸剡 驰,这样写就生成文本式的*。x:conv3ds—x*。 X,用写字板形式戏其他形式打开,你会直接看到 mesh物体的构成。.X文件的头信息:在.x文件的 舞头一般有一个筒擎的文件信息:xof表明这是一 令。X文终;0302表示其叛本号,txt袭示其存綮静 文件格式是文本格式.其存储格式逐可以是二避铡 方式,用binary来波示;0302是32位浮点数。如果 是64位就可以用0604表示了#模檄定义:定义的每 个模板都以关键字template开头。然后是模板名。 每个定义魏摸棱郄莠一令GUID泼识臻该模菝豹 唯一身份,模板是埘默嵌套的。模板一般分三种类 趔:封闭式模板,开放式模板,限制式模板;数据对 象:定义好模板之后再实例化,以存放实际数据。 先是模板名,然翳懿实例名,实例名不是必须的,可
O1
通过与下磷的矩阵相乘把一个向量围绕,2C,Y 和岩轴旋转0弧度。注意:当俯视绕轴原点时,角魔 是稽颓时势方涎趣角度,
F1


x(口)。Io co蚶 刚时 0一sin0 cos0
L0


i-cos0


Y(一)一l
『sin0
L0
0——sin0


0 cos0


一sil堙cosO 0 0|
Z(彩一
及。x文件加戢过辑中确定3D模型的空间位置的方法;藏詹用程序再现了一个真安的场景。由于鹿Direcrt3D中时 3D模型的矩理务鳃褥毙较少,霹姥,弛研究毒一定的应粥徐馕。
关篷镯; 3潞艇AX; 3D摸鬣加栽; 垒转变捷,Direct3D
中图分类母:TPl83
文献标识码:A
Disposal Method of 3D Models Used in Direct3D Scene
l 三维实体建模
1。l实体 由于在三位虚拟场景中涉及到的事物比较多,
为了给以后的管璎锚来方便,将任何事物都统一成 舷够一起管理的东鞭,以达到简化和方便程序设计 瓣翅戆。在以羼昀稳建中辑有戆模溅籍称秀实瘁。 1.2实体的镄建
首先定制环境,在Windows XP下安装DirectX 9.0SDK开发工具,并确认在D3D的插件工具里包 禽一个eonv3ds转换器。D3D中一个3D物体——


10
.0

0 1J
综合变换:常常要对一个向嫩进行一系列的变
换。比如,可熊先缩放一个向量,然后旋转它,最爝
万方数据
88
辽宁石油化工大学学报
第28卷
再把它平移到指定的位置。例如:先把向量P=[5
0 0 13在所有轴上缩小为原来的1/5,然后绕着y轴
旋转丌/4,最后把它在z轴上移动1个单位,在Y轴
上移动2个单位,在z轴上移动3个单位。注意:必 须完成缩放,绕轴旋转,最后完成移动。设缩放、旋
OpenGL即开放性图形开发露,OpenGL是国 际上公认的3D图形工业标准,它不仅加速了3D应 用程序的开发,丽腿使应用程序可移植性更好。但 爨在殍发交互式3D应用程序方麟,OpenGI。存在 鞠显酶零是:OpenGL与窗口系统戈荧,不撵供任{嚣 交互手段,必须有稷序员自己编写所有的交互功能# OpenGL编程接掰(API)是低级的C函数,不提供 哪复用(Reuse)的对象库或者应用穗序框架,开发 效率不高;缺乏对文字绘裁的缀好支梅u]。
万方数据
第4期
牡园圊等.Direct3D场景中3D模型的处骥方法
纹理坐标等信息酗]。每一个。x文件就是一个实体。 焱兰缝建摸蓬疆巾我们不霉襞怒整令寝羧凌暴郝建 成一个。x文件,遮榉对以后的场景管理会带来麻 烦,因此我们用3DSMax把场景中的模型根据需要 建模,然后再重新组织成一个整体的虚拟场景。独 嶷的模型会给场景管理带来极大的方便,1ii;在场景 懿磐萋孛模型熬彼鬟确定是必不霹多酶,奉支重熹 分析了模型位嚣的确定在编程中是如何实现的,丽 猩Direet3D中没有直接提供一个憋体的处理方法。
转、移动的变换矩阵分别是S、R。、T如下:
115 0



8(1/5,t/5,1/5)一

1/5



V5 0




巾 07 0——0.707
1 R,(丌/4)一
旧 07 0
O 0.707



00O
rห้องสมุดไป่ตู้
2 — 3 ) 一 九m 1


m0


U 2—3 1
分 聃玎iU 计 算 ;
pS=[1,0,0,1]一P7
第28卷第4期 2008年12月
辽 宁 石 油化 工 大学 学 报
Vol。28 No.4
JOURNAL OF LIAONING UNIVERSITY OF PETROLEUM&CHEMICAL TECHNOI.OGY Dec.2008
文蠢编号:1672—6952f2008》04一∞86~05
Direct3 D场景中3D模型的处理方法
万方p数'R据,一[o.707,0,一0.707,1-1=∥(1) 矿T一[1.707,2,一3.707,13
分别采用缩放,旋转,以及平移一系列变换后,
结果为:
[1.707,2,一3.707,1]
联合变换:
Q=SR,T;艘=[1.707,2,一3.707,13
(2)
同理应用联合变换也会得到相同的结果。
相关文档
最新文档