多媒體技術(shù)13DirectX編程入門(mén)_第1頁(yè)
多媒體技術(shù)13DirectX編程入門(mén)_第2頁(yè)
多媒體技術(shù)13DirectX編程入門(mén)_第3頁(yè)
多媒體技術(shù)13DirectX編程入門(mén)_第4頁(yè)
多媒體技術(shù)13DirectX編程入門(mén)_第5頁(yè)
已閱讀5頁(yè),還剩125頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、第13章 DirectX編程入門(mén)DirectX是微軟公司為編寫(xiě)游戲和其他高性能多媒體應(yīng)用程序而開(kāi)發(fā)的一組高級(jí)的Windows低層API,它包含了對(duì)圖(圖形、視頻和三維動(dòng)畫(huà))、聲音(聲效與音樂(lè))、輸入設(shè)備和網(wǎng)絡(luò)游戲等的支持。本章先概述DirectX的基本內(nèi)容,然后介紹DirectX的主要組件Direct3D和DirectSound的基本編程方法,并給出若干具體編程實(shí)例。13.1 DirectX概述本節(jié)簡(jiǎn)單介紹DurectX的發(fā)展歷史、版本和功能的演化、結(jié)構(gòu)和模塊劃分。DurectX是Windows的一種多媒體API,它在保持設(shè)備無(wú)關(guān)性的同時(shí),可以讓?xiě)?yīng)用程序直接控制多媒體設(shè)備,從而能充分利用硬件的

2、功能,因此可獲得最高的性能。DurectX自從推出以來(lái),就始終處在快速發(fā)展的過(guò)程之中。它已經(jīng)經(jīng)歷了多個(gè)版本,其模塊和功能也一直在不斷地增加和完善。DirectX是一種基于COM的系統(tǒng),主要由硬件抽象層HAL和硬件模擬層HEL所構(gòu)成。DurectX被分成若干個(gè)組件模塊,涵蓋了多媒體應(yīng)用的方方面面。而且這些組件的數(shù)目、名稱(chēng)和功能,也是隨著其版本的演化而有所增減、改變和加強(qiáng)。13.1.1歷史微軟公司于1990年5月推出的Windows 3.0大獲成功,它是一種與設(shè)備無(wú)關(guān)的具有圖形用戶(hù)界面(GUI)的操作系統(tǒng)。后來(lái)又于1992年3月推出Windows 3.1,提供了對(duì)多媒體的支持。不過(guò)Windows的

3、與設(shè)備無(wú)關(guān)的設(shè)計(jì)思想,雖然使得Windows向程序員提供了一個(gè)獨(dú)立于硬件的軟件開(kāi)發(fā)優(yōu)秀平臺(tái),但它不讓?xiě)?yīng)用程序直接操作顯卡和聲卡等多媒體硬件,這樣就降低了多媒體應(yīng)用程序(特別是計(jì)算機(jī)游戲)的運(yùn)行效率,例如限制了動(dòng)畫(huà)的幀率、不提供混音功能等。所以當(dāng)時(shí)的Windows并不是一個(gè)可以開(kāi)發(fā)和運(yùn)行高效多媒體程序(如3D游戲)的理想環(huán)境,逼迫PC游戲開(kāi)發(fā)商只好繞開(kāi)Windows而仍舊開(kāi)發(fā)DOS下的游戲。為了改變這種難堪的局面,促使游戲界放棄DOS而使用Windows,微軟需要在設(shè)備無(wú)關(guān)性與高性能之間取得某種平衡,決定為Windows添加一種高性能的動(dòng)畫(huà)機(jī)制(以及后來(lái)的輸入與音響等),因此于1995年推出了G

4、ame SDK,后來(lái)改名為DirectX。其中的Direct指可以直接訪問(wèn)多媒體硬件;X指它的不同組成部分,如Direct3D、DirectSound、DirectInput和DirectPlay等。13.1.2版本與功能因?yàn)镈irectX必須支持多媒體設(shè)備的最新技術(shù)和功能,而多媒體硬件(尤其是顯卡的3D性能)和技術(shù)始終處在高速發(fā)展過(guò)程中,所以DirectX的技術(shù)和版本也同樣在不斷地發(fā)展和演變,其中發(fā)展最快的是3D接口部分。下面列出DirectX的主要版本的發(fā)布時(shí)間、引入的新模塊和特性:1.01995年9月30日:DirectDraw、DirectSound、DirectInput、Direc

5、tPlay、DirectSetup;2.01996年6月5日:引入Direct3D(次版本有2.0a);3.01996年9月15日:支持MMX、為DirectSound 補(bǔ)充DirectSound3D API(次版本有3.0a);4.0無(wú)此版本號(hào);5.01997年7月16日:有許多改進(jìn),如受力反饋控制器、多顯示器支持、新的游戲控制面板、用戶(hù)界面的全面改進(jìn)等(次版本有5.1和5.2);6.01998年8月7日:添加新的3D特性(如添加DXUT框架)、支持AMD公司的3DNow!技術(shù)、性能較5.0有提高。在1999年2月3日推出的6.1版中,添加了DirectMusic模塊;7.01999年9月2

6、2日:改進(jìn)3D圖形和聲音、性能更快,為Direct3D API引入硬件傳送、光照和紋理壓縮、以及硬件加速,引入D3DX工具庫(kù)。使用Creative公司的EAX技術(shù)改進(jìn)3D聲音的算法(次版本有7.0a和7.1);8.02000年9月30日:將DirectDraw與Direct3D完全集成在一起、其中Direct3D的性能有了本質(zhì)上的飛躍(引入頂點(diǎn)/像素shader著色引擎/光照模型、支持硬件點(diǎn)精靈和三維體紋理),將DirectMusic與 DirectSound更緊密地集成在一起構(gòu)成DirectX Audio,更新了DirectInput與DirectPlay,添加了DirectShow、拋棄了

7、其余的DirectX Media模塊。2001年11月11日推出的8.1版,被集成在Windows XP中銷(xiāo)售,該版本添加了從DirectShow分離出的DMO(DirectX Media Objects媒體對(duì)象)組件模塊。它還支持許多新的圖形特性,如像素著色引擎的1.21.4版、動(dòng)態(tài)/高分辨率紋理、新3D擴(kuò)展方法等(次版本有8.0a、8.1、8.1a和8.1b);9.02002年12月24日:添加許多新特性到DirectX Graphics和DirectShow中,例如將DirectDraw的功能并入到Direct3D之中,支持頂點(diǎn)和像素著色引擎的新版本2.0和3.0,引入裁剪測(cè)試、位移貼圖

8、和多元紋理,支持128位浮點(diǎn)著色精度和根據(jù)顯示器自動(dòng)調(diào)整值等。也添加若干新特性到DirectInput、DirectPlay、DirectSound和DirectMusic中。(次版本有9.0a、9.0b和9.0c)。DirectX的最后一個(gè)以數(shù)字和字母命名的版本是2004年8月9日推出的9.0c,后來(lái)又于2004年10月、2005年的2/4/6/8/10月分別推出了它的多個(gè)升級(jí)版。從2005年12月推出的DirectX開(kāi)始,其版本的命名發(fā)生了變化:主版本號(hào)改為DX,次版本改為發(fā)布的年月。一般是每?jī)蓚€(gè)月推出一個(gè)新版本,因此也叫做DirectX 9.0c的雙月更新(bimonthly updat

9、es)。當(dāng)前最新版本為2006年10月11日推出的DX October 2006。它們都包含了(于2002年推出的專(zhuān)為.NET框架設(shè)計(jì)的)托管(Managed)DirectX,將原來(lái)DirectX多個(gè)分離的COM模塊集成到了一個(gè)容易使用的單一CLR文件之中。10?:DirectX不會(huì)有第10版了,因?yàn)槲④浌疽褜irectX的功能集成進(jìn)其新一代操作系統(tǒng)Windows Vista中,而不再將其作為一個(gè)額外的模塊了。但是會(huì)有Direct3D 10,已于2006年12月13日隨Direct3D SDK的December 2006版一起發(fā)布,并被嵌入到Windows Vista中。另外,作為學(xué)生和業(yè)

10、余愛(ài)好者的DirectX替代產(chǎn)品,微軟公司于2004年3月24日宣布了用于托管運(yùn)行環(huán)境下計(jì)算機(jī)游戲的設(shè)計(jì)、開(kāi)發(fā)和管理的框架和工具集XNA,并于2006年12月11日推出了XNA Framework Redistributable 和XNA Game Studio Express的1.0版,可用于Windows和Xbox 360游戲的開(kāi)發(fā)。Windows API應(yīng)用程序Windows API子系統(tǒng)(GDI、MMAPI、MCI、.)Windows驅(qū)動(dòng)程序接口DirectXHELWindows API應(yīng)用程序Windows API子系統(tǒng)(GDI、MMAPI、MCI、.)Windows驅(qū)動(dòng)程序接口Di

11、rectXHELHALPC硬件子系統(tǒng)DirectX圖13-1 DirectX子系統(tǒng)DirectX是一種基于COM(Component Object Model,組件對(duì)象模型)的系統(tǒng),它既不屬于驅(qū)動(dòng)程序?qū)?,也不屬于?yīng)用層。DirectX的主要設(shè)計(jì)目標(biāo)是在提供某種設(shè)備獨(dú)立性的同時(shí)獲取高速度,為此微軟公司為DirectX設(shè)計(jì)了如圖13-1所示的體系結(jié)構(gòu)。其中:圖13-1 DirectX子系統(tǒng)HAL = Hardware Abstract Layer(硬件抽象層)負(fù)責(zé)檢測(cè)本機(jī)的硬件功能,并以一種獨(dú)立于設(shè)備的方式提供這些功能;HEL = Hardware Emulation Layer(硬件模擬層)負(fù)責(zé)

12、提供DirectX功能中本機(jī)硬件不支持部分的模擬實(shí)現(xiàn)。但是從8.0版起,DirectX就不再提供硬件模擬層HEL了,需要開(kāi)發(fā)商、第三方或自己來(lái)編寫(xiě)一個(gè)PSD(Pluggable Software Device可插式軟件設(shè)備)連到DirectX提供的HEL接口上,稱(chēng)之為參考設(shè)備。但是現(xiàn)在很少有這樣的PSD可用,因此新版本的DirectX是嚴(yán)重依賴(lài)于硬件的。13.1.4組成DirectX由多個(gè)(COM組件)模塊組成,而且隨著版本的演化,這些模塊也在不斷地增減、合并和改變。最新的DirectX組件的模塊構(gòu)成如圖13-2所示,括號(hào)中的數(shù)字為該模塊被首次引進(jìn)(或移出)的版本號(hào)。下面是DirectX的主要

13、組成模塊的簡(jiǎn)單介紹:DirectX Graphics(圖形) 包括DirectDraw和Direct3D:DirectDraw(繪制) 二維圖形繪制(高速位圖傳送/視頻與2D動(dòng)畫(huà))。從9.0版起,DirectDraw已被集成到了Direct3D之中。Direct3D(三維) 三維圖形繪制。分成保留(retained)和立即(immediate)兩種模式(mode):保留模式是一種高層API,建立在立即模式之上,使用起來(lái)方便容易,但是效率不高,適合于初學(xué)者;立即模式則是一種底層API,使用復(fù)雜,但是其效率比保留模式高得多。大多數(shù)DirectX應(yīng)用程序,特別是計(jì)算機(jī)游戲,都是采用立即模式進(jìn)行開(kāi)發(fā)。

14、自從6.0版以來(lái),保留模式API的發(fā)展停滯不前,而立即模式API的發(fā)展卻日新月異。不論是保留模式還是立即模式,Direct3D都是建立在DirectDraw之上的。從9.0版起,Direct3D包含了DirectDraw,它像OpenGL一樣也具有二維圖形繪制的功能。Direct3D的下一個(gè)版本為Durect3D 10,為Windows Vista的一個(gè)有機(jī)組成部分。D3DX(Direct3D擴(kuò)展) 為Direct3D服務(wù)的實(shí)用工具庫(kù),執(zhí)行公共的數(shù)學(xué)計(jì)算和一些復(fù)雜的任務(wù),包含若干簡(jiǎn)化3D模型使用的類(lèi),如粒子系統(tǒng)(particle system)。D3DX由動(dòng)態(tài)鏈接庫(kù)(DLL)提供。DXUT(編

15、程框架) 建立在Direct3D API之上的樣例框架,也叫通用文件框架,可以幫助程序員減少在繁瑣的平凡工作(如創(chuàng)建窗口、創(chuàng)建設(shè)備、處理Windows消息和設(shè)備事件等)上所花的時(shí)間。DirectXDirectXDirectX Graphics (8.0)DirectDraw (1.0)Direct3D (2.0)DirectX Audio (8.0)DirectSound (1.0)DirectMusic (6.1)DirectSound 3D (3.0)DirectInput (1.0)DirectPlay (1.0)DirectSetup (1.0)DirectX Media (5.0)D

16、irectShow (5.0)DirectAnimation (5.0)DirectX視頻加速 (5.0)Direct3D保留模式 (5.0)DirectX Transform (5.0)并入(9.0)移入平臺(tái)SDK (9.0c 2005.4)建議用WinSocket和WinFirewall API代替 (9.0c)并入(8.0)移入Windows Media SDK (8.0)XInput (9.0c 2005.10)Xbox Live (Vista)Media Foundation (Vista)XACT (9.0c 2006.2)XNA (Xbox/Vista)DirectX Media

17、 Objects (8.1)分出(8.1)并入(6.0)Direct3D立即模式 (2.0)D3DX (7.0) / DXUT(6.0)圖13-2 DirectX的組成模塊DirectX Audio(音頻)包括DirectSound和DirectMusic:DirectSound(聲音)主要針對(duì)波形音頻,底層接口??捎糜陂_(kāi)發(fā)播放和捕捉波形音頻的高性能立體與三維(DirectSound 3D)音頻應(yīng)用程序。在下一代DirectX中,DirectSound的功能將由XACT(Microsoft Cross-Platform Audio Creation Tool微軟跨平臺(tái)音頻生成工具)來(lái)代替。Di

18、rectMusic(音樂(lè))主要針對(duì)MIDI音樂(lè),高層接口。為基于波形、MIDI聲音或DirectMusic生成器所創(chuàng)造的動(dòng)態(tài)內(nèi)容之音樂(lè)和非音樂(lè)聲道提供一個(gè)完整的解決方案。XACT(游戲音頻) XACT(Microsoft Cross-Platform Audio Creation Tool,微軟跨平臺(tái)音頻生成工具),是一種多人合作的音頻設(shè)計(jì)工具和相關(guān)API,用于游戲的動(dòng)態(tài)音頻開(kāi)發(fā)。DirectInput(輸入) 提供對(duì)各種輸入設(shè)備的支持,包括對(duì)受力反饋(force-feedback)技術(shù)的全面支持。在下一代DirectX中,DirectInput將被XInput代替。DirectPlay(游戲

19、) 提供對(duì)多人網(wǎng)絡(luò)游戲的支持。在最新的DirectX版本中,微軟公司反對(duì)(deprecate)使用DirectPlay,而建議改用Windows Sockets和Windows Firewall API來(lái)代替。在下一代DirectX中,DirectPlay可能會(huì)被Xbox Live代替。DirectSetup(安裝)提供DirectX組件的一次性調(diào)用安裝的一個(gè)簡(jiǎn)單API(自動(dòng)安裝DirectX驅(qū)動(dòng)程序)。DirectShow(展示)提供多媒體(音視頻)流的高質(zhì)量捕捉和重放。在8.0版之前,DirectShow是DirectX Media的一個(gè)組成模塊。到8.0版時(shí),因?yàn)镈irectX SDK拋

20、棄了DirectX Media,所以才將DirectShow集成到了DirectX之中。在DirectX 9.0c的2005年4月升級(jí)版中,DirectShow又被移出DirectX,放入微軟公司的平臺(tái)SDK之中。DirectX Media Objects(媒體對(duì)象DMO)基于COM的多媒體和數(shù)據(jù)流組件,支持音視頻的編解碼器和特效。是在DirectX的8.1版時(shí),從DirectShow分出的,其功能類(lèi)似于DirectShow的過(guò)濾器。DirectX Media(媒體)是一個(gè)用于流媒體應(yīng)用的外部API集合。在DirectX 6.0之前,DirectX Media SDK和DirectX SDK是

21、兩個(gè)分離的SDK。在6.0版時(shí)DirectX Media SDK被集成到DirectX SDK之中。DirectX Media的運(yùn)行模塊,被集成到Windows和IE之中。到了8.0版時(shí),DirectX Media又被DirectX SDK拋棄(其核心模塊DirectShow被集成到了DirectX之中),其功能被隨Windows 2000 Server推出的Windows Media SDK所代替。DirectX Transform(變換) 用于產(chǎn)生二、三維圖形的各種效果,如混色和表面彎曲等。DirectAnimation(動(dòng)畫(huà))集成多種媒體類(lèi)型來(lái)創(chuàng)建復(fù)雜動(dòng)畫(huà),并可用作網(wǎng)頁(yè)內(nèi)容。Direct

22、XVideo Acceleration(視頻加速DXVA) 利用硬件加速二維視頻的解碼操作。Direct3DRetained Mode(保留模式) Direct3D的保留模式是一種高層API,建立在Direct3D立即模式之上,使用起來(lái)方便容易,但是效率不高,適合于初學(xué)者。DirectShow(展示) 支持音視頻流的高質(zhì)量采集和重放。13.1.5編程準(zhǔn)備為了用VC編寫(xiě)DirectX應(yīng)用程序,必須先下載并安裝DirectX SDK,并進(jìn)行必要的頭/庫(kù)文件路徑和鏈接庫(kù)的設(shè)置。下面以Windows XP中文版環(huán)境下的Visual C+ 2005中文版和DirectX 9.0cAugust 2006

23、SDK為例,介紹進(jìn)行具體的DirectX編程之前,所需做的必要準(zhǔn)備工作。下載并安裝DirectX SDK可以從微軟公司的官方網(wǎng)站( HYPERLINK /windows/directx/ /windows/directx/)下載最新的DirectX SDK,如dxsdk_dec2006.exe(448MB)。安裝完成后,會(huì)在安裝目錄(缺省為“C:Program FilesMicrosoft DirectX SDK (December 2006)”)中生成Developer Runtime、Documentation、Include、Lib、Redist、Samples和Utilities等多個(gè)

24、子目錄。安裝時(shí)還會(huì)為Windows操作系統(tǒng)生成名為“Microsoft DirectX SDK (December 2006)”的程序組,包含多個(gè)子程序組和程序。安裝程序會(huì)將DirectX SDK的幫助文檔,也安裝到Visual Studio 2005的幫助系統(tǒng)內(nèi),位于其“目錄/DirectX SDK (December 2006)”目錄之中,包含“DirectX SDK (December 2006) C+”和“DirectX SDK (December 2006) Managed”兩個(gè)幫助子目錄。設(shè)置包含和庫(kù)路徑在Visual Studio 2005中文版的IDE中,選“工具/選項(xiàng)”菜單項(xiàng)

25、,打開(kāi)“選項(xiàng)”對(duì)話(huà)框(參見(jiàn)圖13-5)。圖13-5 Visual Studio 2005的“選項(xiàng)”對(duì)話(huà)框再選該對(duì)話(huà)框左邊的“項(xiàng)目和解決方案/VC+目錄”路徑,在右邊的“顯示以下內(nèi)容的目錄”欄的下拉式列表框中,選“包含文件”項(xiàng)。按該欄下面的“新行”鈕,則在其下方的顯示欄中會(huì)出現(xiàn)新行,再按新行右端的帶省略號(hào)的瀏覽鈕,在彈出的“選擇目錄”對(duì)話(huà)框中,選擇DirectX SDK的Include目錄所在的路徑“C:Program FilesMicrosoft DirectX SDK (August 2006)Include”,然后按“打開(kāi)”關(guān)閉“選擇目錄”對(duì)話(huà)框。結(jié)果參見(jiàn)圖13-6。圖13-6 設(shè)置Dir

26、ectX的“包含文件”的路徑可類(lèi)似選擇“庫(kù)文件”項(xiàng),添加庫(kù)文件路徑“C:Program FilesMicrosoft DirectX SDK (August 2006)Libx86”,結(jié)果參見(jiàn)圖13-7。最后,按“確定”鈕,關(guān)閉“選項(xiàng)”對(duì)話(huà)框。圖13-7 設(shè)置DirectX的“庫(kù)文件”的路徑注意,對(duì)DirectX的包含路徑和庫(kù)路徑的設(shè)置,對(duì)所有項(xiàng)目都有效。設(shè)置鏈接庫(kù)先創(chuàng)建一個(gè)DirectX應(yīng)用程序的MFC單文檔項(xiàng)目(如DxTest),再在VS05的IDE中,選“項(xiàng)目/屬性”,打開(kāi)“DxTest屬性頁(yè)”對(duì)話(huà)框。在左上角的“配置”欄中,選中“所有配置”項(xiàng);再選左邊的路徑“配置屬性/鏈接器/輸入”,

27、在右邊的“附加依賴(lài)項(xiàng)”欄中,添加d3d9.lib d3dx9.lib d3dxof.lib dsound.lib dxguid.lib winmm.lib等鏈接庫(kù)(在多個(gè)庫(kù)文件之間,用空格分隔)。具體添加哪些DirectX庫(kù),與具體應(yīng)用程序所使用的DirectX模塊有關(guān),你也可以查看DirectX的庫(kù)目錄。最后,按“應(yīng)用”鈕和“確定”鈕,關(guān)閉屬性頁(yè)對(duì)話(huà)框。參見(jiàn)圖13-8。圖13-8設(shè)置DirectX的鏈接庫(kù)注意,對(duì)DirectX鏈接庫(kù)的設(shè)置,只對(duì)VC05中當(dāng)前打開(kāi)的單個(gè)項(xiàng)目有效。在安裝了DirectX SDK,并設(shè)置好文件路徑和鏈接庫(kù)后,就可以開(kāi)始編寫(xiě)具體的DirectX應(yīng)用程序了。Direc

28、tX的組件眾多、功能強(qiáng)大、編程復(fù)雜,完整的介紹需要幾本大部頭的專(zhuān)著才行,本書(shū)只準(zhǔn)備簡(jiǎn)單介紹DirectX的最主要模塊Direct3D和DirectSound編程的最基本內(nèi)容。13.2 Direct3D編程簡(jiǎn)介Direct3D(直接三維)是DirectX的核心模塊,新版本的Direct3D中還包含原來(lái)DirectDraw模塊的2D功能。因此,現(xiàn)在的Direct3D是DirectX Graphics的唯一模塊,具有DirectX(二、三維)圖形的全部功能。13.2.1流水線(xiàn)與設(shè)備Direct3D用圖形流水線(xiàn)(graphics pipeline)來(lái)處理和渲染場(chǎng)景(render scene),而Dir

29、ect3D設(shè)備(device)是執(zhí)行變換(transformation)和光照(lighting)等操作的渲染部件。Direct3D圖形流水線(xiàn)可通過(guò)Direct3D圖形流水線(xiàn)來(lái)充分利用硬件性能,以提供高效處理和繪制Direct3D場(chǎng)景到顯示器的能力。圖13-9為流水線(xiàn)(pipeline,管線(xiàn)/管道/流程)的組成模塊框圖。頂點(diǎn)數(shù)據(jù)頂點(diǎn)數(shù)據(jù)圖元數(shù)據(jù)鑲嵌頂點(diǎn)處理幾何處理像素處理像素繪制紋理采樣器紋理表面圖13-9 Direct3D圖形流水線(xiàn)Direct3D設(shè)備圖13-10 Direct3D設(shè)備架構(gòu)變換模塊光照模塊光柵化器Direct3D設(shè)備架構(gòu)Direct3D設(shè)備(device)是Direct3D的

30、渲染部件,它封裝和存儲(chǔ)渲染狀態(tài)。另外,它還執(zhí)行變換和光照等操作,并且光柵化圖像到表面(如屏幕)。在結(jié)構(gòu)上,Direct3D設(shè)備包含變換模塊(transformation module)、光照模塊(lighting module)和光柵化器(rasterizer)。圖13-10為Direct3D圖13-10 Direct3D設(shè)備架構(gòu)變換模塊光照模塊光柵化器Direct3D設(shè)備架構(gòu)當(dāng)前,Direct3D有兩種主要的設(shè)備類(lèi)型:HAL設(shè)備(hal device) 具有硬件加速的光柵化(rasterization),可同時(shí)使用硬件和軟件的頂點(diǎn)處理進(jìn)行著色(shading)。參考設(shè)備(reference

31、device)由軟件驅(qū)動(dòng)程序提供,現(xiàn)在主要用于性能測(cè)試。創(chuàng)建Direct3D對(duì)象創(chuàng)建Direct3D設(shè)備對(duì)象設(shè)置渲染狀態(tài)定義頂點(diǎn)格式創(chuàng)建頂點(diǎn)緩沖區(qū)鎖定頂點(diǎn)緩沖區(qū)解鎖頂點(diǎn)緩沖區(qū)開(kāi)始場(chǎng)景結(jié)束場(chǎng)景構(gòu)造幾何對(duì)象設(shè)置材質(zhì)和光照或紋理設(shè)置設(shè)備的流源和頂點(diǎn)格式繪制圖元展現(xiàn)場(chǎng)景進(jìn)行世界、觀察和投影矩陣變換清除對(duì)象清除顯示表面具有軟件特性的參考設(shè)備不一定能提供與硬件等創(chuàng)建Direct3D對(duì)象創(chuàng)建Direct3D設(shè)備對(duì)象設(shè)置渲染狀態(tài)定義頂點(diǎn)格式創(chuàng)建頂點(diǎn)緩沖區(qū)鎖定頂點(diǎn)緩沖區(qū)解鎖頂點(diǎn)緩沖區(qū)開(kāi)始場(chǎng)景結(jié)束場(chǎng)景構(gòu)造幾何對(duì)象設(shè)置材質(zhì)和光照或紋理設(shè)置設(shè)備的流源和頂點(diǎn)格式繪制圖元展現(xiàn)場(chǎng)景進(jìn)行世界、觀察和投影矩陣變換清除對(duì)象清除顯

32、示表面13.2.2基本編程過(guò)程Direct3D的基本編程過(guò)程如圖13-11所示。下面各小節(jié)依次介紹Direct3D編程的基本步驟和方法。13.2.3創(chuàng)建和初始化對(duì)象為了使用Direct3D,你必須首先創(chuàng)建一個(gè)應(yīng)用窗口,然后再創(chuàng)建和初始化Direct3D對(duì)象。利用這些對(duì)象所實(shí)現(xiàn)的COM接口來(lái)操作它們,以創(chuàng)建繪制場(chǎng)景所需的其它對(duì)象。如果進(jìn)行MFC編程,則可以省略創(chuàng)建窗口這一步,而直接使用視圖類(lèi)所代表的客戶(hù)區(qū)窗口。圖13-11 Direct3D編程的基本過(guò)程下面介紹的是初始化Direct3D的內(nèi)容,包括創(chuàng)建Direct3D對(duì)象、創(chuàng)建Direct3D設(shè)備和設(shè)置Direct3D設(shè)備的渲染(render圖

33、13-11 Direct3D編程的基本過(guò)程創(chuàng)建Direct3D對(duì)象可使用全局函數(shù)Direct3DCreate9來(lái)創(chuàng)建Direct3D接口對(duì)象:IDirect3D9 * Direct3DCreate9( / 成功返回指向IDirect3D9接口的指針,失敗返回NULL UINT SDKVersion / 必須為D3D_SDK_VERSION);例如:IDirect3D9 * g_pD3D = Direct3DCreate9( D3D_SDK_VERSION );創(chuàng)建Direct3D設(shè)備可使用IDirect3D9接口的CreateDevice方法來(lái)創(chuàng)建設(shè)備(尾參數(shù)的返回值):HRESULT Cre

34、ateDevice( / 成功返回D3D_OK(=0) UINT Adapter, / 顯卡(display adapter)序號(hào),D3DADAPTER_DEFAULT為主顯卡 D3DDEVTYPE DeviceType, / 設(shè)備的枚舉類(lèi)型,一般取為D3DDEVTYPE_HAL HWND hFocusWindow, / 焦點(diǎn)窗口句柄,可取為this-m_hWnd DWORD BehaviorFlags, / 控制設(shè)備的創(chuàng)建行為之選項(xiàng)組合,可以采用硬件或軟件/ 的頂點(diǎn)處理,如D3DCREATE_SOFTWARE_VERTEXPROCESSING D3DPRESENT_PARAMETERS *

35、pPresentationParameters, / 指向展現(xiàn)參數(shù)結(jié)構(gòu)/ D3DPRESENT_PARAMETERS的指針 IDirect3DDevice9 * ppReturnedDeviceInterface / 代表被創(chuàng)建設(shè)備的/ IDirect3DDevice9返回接口的指針地址);其中,展現(xiàn)參數(shù)結(jié)構(gòu)D3DPRESENT_PARAMETERS的定義為:typedef struct D3DPRESENT_PARAMETERS / 展現(xiàn)參數(shù)結(jié)構(gòu)UINT BackBufferWidth, BackBufferHeight; / 后臺(tái)緩沖區(qū)的寬高(以像素為單位),/ 對(duì)窗口模式可取為0,對(duì)全屏

36、模式則必須與當(dāng)前顯卡枚舉模式的一致D3DFORMAT BackBufferFormat; / 后臺(tái)緩沖區(qū)的格式,可取為/ D3DFMT_UNKNOWN(= 0) UINT BackBufferCount; / 后臺(tái)緩沖區(qū)計(jì)數(shù),可取為03,取0時(shí)等價(jià)于1D3DMULTISAMPLE_TYPE MultiSampleType; / 多樣本類(lèi)型,一般取為/ D3DMULTISAMPLE_NONE(= 0) DWORD MultiSampleQuality; / 多樣本質(zhì)量水平,一般取0D3DSWAPEFFECT SwapEffect; / 交換效果,可取為/ D3DSWAPEFFECT_DISCAR

37、D(= 1)、D3DSWAPEFFECT_FLIP(= 2)/ 和D3DSWAPEFFECT_COPY(= 3)等枚舉值 HWND hDeviceWindow; / 設(shè)備窗口的句柄,對(duì)窗口模式可取為NULL(= 0) BOOL Windowed; / 應(yīng)用程序在窗口/全屏中運(yùn)行時(shí)取TRUE/FALSEBOOL EnableAutoDepthStencil; / 允許自動(dòng)深度模板,為T(mén)RUE則由Direct3D/ 來(lái)管理應(yīng)用程序的深度緩沖區(qū)D3DFORMAT AutoDepthStencilFormat; / 自動(dòng)深度模板格式,可取/ D3DFMT_D16、D3DFMT_D24S8和D3DFMT

38、_D32等枚舉值 DWORD Flags; / 表現(xiàn)標(biāo)志D3DPRESENTFLAG常數(shù)之一,可取為0 UINT FullScreen_RefreshRateInHz; / 全屏?xí)r的屏幕刷新率,對(duì)窗口模式必須為0UINT PresentationInterval; / 前后臺(tái)緩沖區(qū)交換的最大速率,可取為/ D3DPRESENT_INTERVAL_DEFAULT(= 0) D3DPRESENT_PARAMETERS;例如: / 設(shè)置創(chuàng)建D3D設(shè)備用的表現(xiàn)結(jié)構(gòu) D3DPRESENT_PARAMETERS d3dpp; / 定義表現(xiàn)結(jié)構(gòu)變量 ZeroMemory( &d3dpp, sizeof(d3

39、dpp) ); / 內(nèi)存清零 d3dpp.Windowed = TRUE; / 窗口模式 d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; / 放棄交換效果 d3dpp.BackBufferFormat = D3DFMT_UNKNOWN; / 未知格式 d3dpp.EnableAutoDepthStencil = TRUE; / 允許自動(dòng)深度模板d3dpp.AutoDepthStencilFormat = D3DFMT_D16; / 16位深度緩沖LPDIRECT3DDEVICE9 g_pd3dDevice; / 定義D3D設(shè)備接口的指針/ 創(chuàng)建D3D設(shè)備對(duì)象

40、(獲取D3D設(shè)備接口的指針)g_pD3D-CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, this-m_hWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING,&d3dpp, &g_pd3dDevice );設(shè)置設(shè)備的渲染狀態(tài)利用IDirect3D9接口的CreateDevice方法所返回的設(shè)備接口IDirect3DDevice9的指針,可以調(diào)用該接口的設(shè)置渲染(render著色)狀態(tài)方法SetRenderState,來(lái)初始化設(shè)備:HRESULT SetRenderState( / 成功返回D3D_OK(= 0)

41、D3DRENDERSTATETYPE State, / 設(shè)備狀態(tài) DWORD Value / 設(shè)置值);其中,設(shè)備狀態(tài)State,可取D3DRENDERSTATETYPE枚舉的任意值,如D3DRS_ZENABLE(允許Z緩沖)、D3DRS_FILLMODE(填充模式)、D3DRS_SHADEMODE(陰影模式)、 D3DRS_ALPHATESTENABLE(允許測(cè)試)、D3DRS_CULLMODE(剔除模式)、D3DRS_FOGENABLE(允許霧化)、D3DRS_LIGHTING(光照)、D3DRS_DITHERENABLE(允許抖動(dòng))、。例如:g_pd3dDevice-SetRenderS

42、tate( D3DRS_CULLMODE, D3DCULL_NONE );/ 關(guān)閉背面剔除g_pd3dDevice-SetRenderState( D3DRS_ZENABLE, TRUE ); / 允許Z緩沖g_pd3dDevice-SetRenderState( D3DRS_LIGHTING, FALSE ); / 關(guān)閉光照13.2.4 創(chuàng)建場(chǎng)景三維場(chǎng)景是由若干物體(幾何對(duì)象)構(gòu)成的,復(fù)雜的幾何對(duì)象由多個(gè)簡(jiǎn)單的圖元(點(diǎn)、線(xiàn)、三角形和多邊形等)所組成,而圖元(primitive)又是頂點(diǎn)(vertex)的集合。圖13-12 3D圖元表面的三角網(wǎng)格3D圖元一般是一個(gè)多面體,通常用其表面的三角網(wǎng)格

43、來(lái)表示,參見(jiàn)圖13-12。所以最基本的圖元是三角形和頂點(diǎn)。圖13-12 3D圖元表面的三角網(wǎng)格創(chuàng)建場(chǎng)景中的幾何對(duì)象,等價(jià)于建立表示該幾何體的頂點(diǎn)集合。因此,必須先定義自己的頂點(diǎn)結(jié)構(gòu)并創(chuàng)建頂點(diǎn)緩沖區(qū),然后在鎖定頂點(diǎn)緩沖區(qū)后,再通過(guò)給頂點(diǎn)緩沖區(qū)中的各頂點(diǎn)結(jié)構(gòu)賦值來(lái)構(gòu)造幾何對(duì)象,最后解鎖頂點(diǎn)緩沖區(qū)。定義頂點(diǎn)結(jié)構(gòu)Direct3D使用一種FVF(Flexible Vertex Format可變頂點(diǎn)格式)結(jié)構(gòu)來(lái)定義頂點(diǎn),以滿(mǎn)足用戶(hù)的不同需要。在FVF結(jié)構(gòu)CUSTOMVERTEX中,可以包含描述頂點(diǎn)的位置、RHW(reciprocal homogeneous w倒數(shù)齊次w,表示已變換頂點(diǎn)位置的齊次坐標(biāo)w分量

44、)、法向、大小和(漫射、鏡面反射)顏色等字段,具體內(nèi)容由用戶(hù)根據(jù)需要自己來(lái)確定,但是各字段之間的相對(duì)順序不能改變。其中,頂點(diǎn)的位置和法向等字段,一般為三維點(diǎn)向量,可以用Direct3D的擴(kuò)展三維向量結(jié)構(gòu)D3DXVECTOR3來(lái)表示:typedef struct D3DXVECTOR3 FLOAT x;FLOAT y; FLOAT z; D3DXVECTOR3;其中的FLOAT為float的typedef類(lèi)型,定義在windef.h頭文件中。而顏色一般采用DWORD的typedef定義類(lèi)型D3DCOLOR。例如:struct CUSTOMVERTEX / 含位置、法向量和顏色的自定義頂點(diǎn)結(jié)構(gòu)D3

45、DXVECTOR3 position; / 未變換頂點(diǎn)的3D位置D3DXVECTOR3 normal; / 頂點(diǎn)的表面法向量D3DCOLOR color; / 顏色;或:struct CUSTOMVERTEX / 含位置、顏色和紋理坐標(biāo)的自定義頂點(diǎn)結(jié)構(gòu) D3DXVECTOR3 position; / 未變換頂點(diǎn)的3D位置 D3DCOLOR color; / 顏色 FLOAT tu, tv; / 紋理坐標(biāo); 或:struct CUSTOMVERTEX / 含位置齊次坐標(biāo)和顏色的自定義頂點(diǎn)結(jié)構(gòu)FLOAT x, y, z, rhw; / 已變換頂點(diǎn)的3D位置DWORDcolor; / 顏色;用戶(hù)在定

46、義了自己的頂點(diǎn)結(jié)構(gòu)類(lèi)型后,還需要定義一個(gè)對(duì)應(yīng)的(宏)常量,來(lái)描述該結(jié)構(gòu)的字段內(nèi)容。該(宏)常量由若干表示頂點(diǎn)格式的標(biāo)志位符號(hào)常量(參見(jiàn)表13-1)的位或組合而成。表13-1 頂點(diǎn)數(shù)據(jù)格式標(biāo)志符號(hào)常量值數(shù)據(jù)類(lèi)型描述D3DFVF_XYZ0 x002float, float, float未轉(zhuǎn)換的頂點(diǎn)坐標(biāo)D3DFVF_XYZRHW0 x004float, float, float, float已轉(zhuǎn)換的頂點(diǎn)坐標(biāo)D3DFVF_XYZB150 x006/8/a/c/e1- 3個(gè)float含權(quán)重i的頂點(diǎn)坐標(biāo)D3DFVF_XYZW0 x4002float, float, float, float已轉(zhuǎn)換和裁剪的頂

47、點(diǎn)坐標(biāo)D3DFVF_NORMAL0 x010float, float, float頂點(diǎn)的法線(xiàn)D3DFVF_PSIZE0 x020float點(diǎn)大小D3DFVF_DIFFUSE0 x040DWORD(ARGB)漫射顏色D3DFVF_SPECULAR0 x080DWORD(ARGB)鏡面反射顏色D3DFVF_TEX080 x08001- 4個(gè)floati重紋理映射例如:#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ|D3DFVF_NORMAL | D3DFVF_DIFFUSE)或:#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ|D3DF

48、VF_DIFFUSE|D3DFVF_TEX1)或:const DWORD FVF = (D3DFVF_XYZRHW | D3DFVF_DIFFUSE);創(chuàng)建頂點(diǎn)緩沖區(qū)在定義了頂點(diǎn)結(jié)構(gòu)后,就可以創(chuàng)建頂點(diǎn)緩沖區(qū)了,這可以由IDirect3DDevice9接口的CreateVertexBuffer方法來(lái)完成:HRESULT CreateVertexBuffer( / 成功返回D3D_OK(= 0) UINT Length, / 緩沖區(qū)的字節(jié)大小,一般為 n*sizeof (CUSTOMVERTEX) DWORD Usage, / 緩沖區(qū)用法的附加屬性標(biāo)志,一般為0 DWORD FVF, / 頂點(diǎn)結(jié)構(gòu)

49、格式常量 D3DPOOL Pool, / 緩沖區(qū)所在的內(nèi)存池類(lèi)型(D3DPOOL枚舉值) IDirect3DVertexBuffer9* ppVertexBuffer, / 返回被創(chuàng)建的頂點(diǎn)緩沖區(qū)指針 HANDLE* pSharedHandle / 保留,設(shè)為NULL);其中,內(nèi)存池類(lèi)型D3DPOOL枚舉的定義為:typedef enum D3DPOOL / 內(nèi)存池類(lèi)型枚舉 D3DPOOL_DEFAULT = 0, / AGP存儲(chǔ)器或顯存 D3DPOOL_MANAGED = 1, / AGP存儲(chǔ)器或顯存,且在系統(tǒng)內(nèi)存中還有一份拷貝 D3DPOOL_SYSTEMMEM = 2, / 系統(tǒng)內(nèi)存 D

50、3DPOOL_SCRATCH = 3, / 系統(tǒng)內(nèi)存中的臨時(shí)池 D3DPOOL_FORCE_DWORD = 0 x7fffffff / 未使用(強(qiáng)制該枚舉被編譯成32位) D3DPOOL;例如:g_pd3dDevice-CreateVertexBuffer( 100 *sizeof(CUSTOMVERTEX),0, D3DFVF_CUSTOMVERTEX,D3DPOOL_DEFAULT, &g_pVB, NULL );或:g_pd3dDevice-CreateVertexBuffer( 3 *sizeof(CUSTOMVERTEX),0, FVF,D3DPOOL_MANAGED, &g_pVB

51、, NULL );構(gòu)造點(diǎn)集創(chuàng)建三維場(chǎng)景中的幾何對(duì)象,需要計(jì)算和構(gòu)造描述該幾何對(duì)象的點(diǎn)集。具體做法是:先定義一個(gè)頂點(diǎn)指針(用于操作頂點(diǎn)數(shù)組);再調(diào)用Lock方法來(lái)獲取頂點(diǎn)緩沖區(qū)的首地址(賦值給頂點(diǎn)指針),并鎖定該區(qū)域僅供當(dāng)前操作使用;然后利用該頂點(diǎn)指針,將計(jì)算的頂點(diǎn)結(jié)構(gòu)值填入頂點(diǎn)緩沖區(qū),從而構(gòu)造出幾何對(duì)象;最后調(diào)用Unlock方法解鎖頂點(diǎn)緩沖區(qū)。IDirect3DVertexBuffer9接口的Lock和Unlock方法的定義為:HRESULT Lock( / 成功返回D3D_OK(= 0) UINT OffsetToLock, / 鎖定的偏移地址 UINT SizeToLock, / 鎖定的字

52、節(jié)數(shù) VOID * ppbData, / 返回被鎖定的緩沖區(qū)頭的指針 DWORD Flags / 鎖定方式標(biāo)志,可為0或下列符號(hào)常量的組合:/ D3DLOCK_DISCARD、D3DLOCK_NO_DIRTY_UPDATE、/ D3DLOCK_NOSYSLOCK、D3DLOCK_READONLY、/ D3DLOCK_NOOVERWRITE);HRESULT Unlock(); / 成功返回D3D_OK(= 0)例如:CUSTOMVERTEX* pVertices;g_pVB-Lock( 0, 0, (void*)&pVertices, 0 ); / 給頂點(diǎn)緩沖區(qū)中的各頂點(diǎn)結(jié)構(gòu)賦值(構(gòu)造幾何對(duì)象

53、的點(diǎn)集)g_pVB-Unlock();13.2.5矩陣變換描述單個(gè)物體(3D幾何對(duì)象)一般采用的是本地相對(duì)坐標(biāo)。因此,在渲染之前,需要將它們都轉(zhuǎn)換為描述場(chǎng)景的統(tǒng)一世界空間(world space)坐標(biāo),這對(duì)應(yīng)于世界矩陣變換。為了將三維場(chǎng)景顯示在二維屏幕上,還需要選擇一個(gè)觀察點(diǎn)(眼睛/攝像機(jī))和觀察角度(方向/坐標(biāo))(對(duì)應(yīng)于觀察坐標(biāo)矩陣變換),并將3D場(chǎng)景投影到一個(gè)2D平面(屏幕)上(對(duì)應(yīng)于投影矩陣變換),還要將超出屏幕的部分去掉(裁剪),也可以將場(chǎng)景投射到屏幕的某個(gè)矩形區(qū)域中(視口縮放)。參見(jiàn)圖13-13。世界世界變換觀察變換投影變換裁剪與視口縮放頂點(diǎn)光柵器變換引擎圖13-13 Direct3

54、D的變換引擎下面依次對(duì)這些變換加以介紹,這需要首先介紹Direct3D中的矩陣定義和變換方法。矩陣與變換在Direct3D中,定義了矩陣(matrix)結(jié)構(gòu)D3DXMATRIX :typedef struct D3DXMATRIX / 矩陣結(jié)構(gòu) struct / 注意,C/C+的變量名可以下劃線(xiàn)開(kāi)頭(但不能以數(shù)字開(kāi)頭) FLOAT _11;FLOAT _12;FLOAT _13;FLOAT _14; FLOAT _21;FLOAT _22;FLOAT _23;FLOAT _24; FLOAT _31;FLOAT _32;FLOAT _33;FLOAT _34; FLOAT _41;FLOAT

55、_42;FLOAT _43;FLOAT _44; ; D3DXMATRIX;對(duì)應(yīng)于4*4的浮點(diǎn)矩陣:在Direct3D中,還定義了一個(gè)對(duì)Intel P4 CPU運(yùn)算進(jìn)行了優(yōu)化的16字節(jié)對(duì)齊的矩陣結(jié)構(gòu)(從D3DXMATRIX派生的C+結(jié)構(gòu)對(duì)象):typedef struct _D3DXMATRIXA16 : public D3DXMATRIX / 16字節(jié)對(duì)齊矩陣結(jié)構(gòu) _D3DXMATRIXA16(); _D3DXMATRIXA16( CONST FLOAT * f); _D3DXMATRIXA16( CONST D3DMATRIX& m); _D3DXMATRIXA16( FLOAT _11,

56、 FLOAT _12, FLOAT _13, FLOAT _14, FLOAT _21, FLOAT _22, FLOAT _23, FLOAT _24, FLOAT _31, FLOAT _32, FLOAT _33, FLOAT _34, FLOAT _41, FLOAT _42, FLOAT _43, FLOAT _44 ); void* operator new(size_t s); void* operator new(size_t s); void operator delete(void* p); void operator delete(void* p); struct _D3

57、DXMATRIXA16& operator=(CONST D3DXMATRIX& rhs); _D3DXMATRIXA16;typedef D3DX_ALIGN16 _D3DXMATRIXA16 D3DXMATRIXA16;Direct3D還提供了若干全局矩陣函數(shù),如:D3DXMATRIX * D3DXMatrixIdentity( D3DXMATRIX * pOut); / 創(chuàng)建單位矩陣FLOAT D3DXMatrixDeterminant(CONST D3DXMATRIX * pM); / 返回矩陣的行列式值D3DXMATRIX * D3DXMatrixInverse( / 計(jì)算逆矩陣 D

58、3DXMATRIX * pOut, / 結(jié)果矩陣 FLOAT * pDeterminant, / 行列式值,可置為NULL CONST D3DXMATRIX * pM / 原矩陣);D3DXMATRIX * D3DXMatrixMultiply( / 兩矩陣相乘 D3DXMATRIX * pOut, / 結(jié)果矩陣 CONST D3DXMATRIX * pM1, / 矩陣1 CONST D3DXMATRIX * pM2 / 矩陣2);矩陣變換(transform)的實(shí)施,可采用IDirect3DDevice9接口提供的SetTransform方法:HRESULT SetTransform( /

59、成功返回D3D_OK(= 0) D3DTRANSFORMSTATETYPE State, / 變換類(lèi)型狀態(tài)值 CONST D3DMATRIX * pMatrix / 變換矩陣);其中State的取值可為D3DTRANSFORMSTATETYPE枚舉類(lèi)型或D3DTS_WORLDMATRIX宏的值。如:D3DTS_VIEW(= 2,觀察變換)、D3DTS_PROJECTION(= 3,投影變換)、D3DTS_TEXTURE07(= 1623,紋理變換)、D3DTS_WORLD(= 256,世界變換)等。例如: D3DXMATRIXA16 matWorld; / 定義矩陣結(jié)構(gòu)對(duì)象D3DXMatrix

60、Identity( &matWorld ); / 變成單位矩陣 / 對(duì)matWorld進(jìn)行其他矩陣變換 g_pd3dDevice-SetTransform( D3DTS_WORLD, &matWorld ); / 實(shí)施變換世界變換圖13-14 世界變換一般用每個(gè)物體各自的本地坐標(biāo)來(lái)描述所對(duì)應(yīng)的3D幾何對(duì)象,而用統(tǒng)一的世界坐標(biāo)來(lái)描述整個(gè)場(chǎng)景(參見(jiàn)圖13-14),渲染之前需要將頂點(diǎn)從本地坐標(biāo)系轉(zhuǎn)換到世界坐標(biāo)系。稱(chēng)這種從本地坐標(biāo)到世界坐標(biāo)的轉(zhuǎn)換為世界變換(world transform),世界變換包含平移(translation)、旋轉(zhuǎn)(rotation)和縮放(scaling)等三種具體變換類(lèi)型,

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論