本發(fā)明涉及3D模型處理領(lǐng)域,尤其涉及一種將3D模型導(dǎo)入3ds MAX的方法和裝置。
背景技術(shù):
3D Studio Max,通常簡(jiǎn)稱為3d Max或3ds MAX,是Discreet公司開(kāi)發(fā)的基于計(jì)算機(jī)操作系統(tǒng)的三維動(dòng)畫(huà)渲染和制作軟件。3ds MAX已廣泛應(yīng)用于室內(nèi)設(shè)計(jì)、建筑設(shè)計(jì)、展覽展示設(shè)計(jì)、游戲動(dòng)畫(huà)制作、廣告創(chuàng)意設(shè)計(jì)、多媒體制作、虛擬現(xiàn)實(shí)、輔助教學(xué)以及可視化表現(xiàn)等多個(gè)領(lǐng)域。
現(xiàn)有技術(shù)中,當(dāng)設(shè)計(jì)人員需要將現(xiàn)有的3D模型導(dǎo)入3ds MAX應(yīng)用程序時(shí),操作步驟包括:打開(kāi)3ds MAX應(yīng)用程序,新建場(chǎng)景;點(diǎn)擊“文件”菜單;再點(diǎn)擊“文件”菜單下的“合并”按鈕;最后從本地路徑下查找所需的MAX文件;選定一個(gè)MAX文件,從上述過(guò)程可以看出,直接在3ds MAX應(yīng)用程序中導(dǎo)入現(xiàn)有的3D模型操作步驟復(fù)雜,用戶體驗(yàn)差。
現(xiàn)有技術(shù)中存在的上述技術(shù)問(wèn)題,目前尚未提出有效的解決方案。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的是提供一種將3D模型導(dǎo)入3ds MAX的方法和裝置,以減少將3D模型導(dǎo)入3ds MAX時(shí)的用戶操作步驟,提升用戶體驗(yàn)。
為了實(shí)現(xiàn)上述目的,本發(fā)明提供了一種將3D模型導(dǎo)入3ds MAX的方法。
該方法包括:顯示3D模型對(duì)應(yīng)的實(shí)體控件;響應(yīng)于用戶對(duì)實(shí)體控件所執(zhí)行的導(dǎo)入操作,解析實(shí)體控件;若未解析到3D模型的本地存儲(chǔ)路徑,則根據(jù)解析到的信息獲取本地存儲(chǔ)路徑,并在獲取到本地存儲(chǔ)路徑后,調(diào)用操作系統(tǒng)的API接口向3ds MAX應(yīng)用程序發(fā)送WM_DROPFILES消息;若解析到本地存儲(chǔ)路徑,則調(diào)用操作系統(tǒng)的API接口向3ds MAX應(yīng)用程序發(fā)送WM_DROPFILES消息;其中,WM_DROPFILES消息中攜帶有本地存儲(chǔ)路徑,本地存儲(chǔ)路徑用于使3ds MAX應(yīng)用程序獲取到3D模型的MAX文件。
進(jìn)一步地,顯示3D模型對(duì)應(yīng)的實(shí)體控件的步驟包括:訪問(wèn)第一數(shù)據(jù)庫(kù),將第一數(shù)據(jù)庫(kù)存儲(chǔ)的每個(gè)3D模型的模型描述參數(shù)轉(zhuǎn)化為實(shí)體控件進(jìn)行顯示,其中,第一數(shù)據(jù)庫(kù)存儲(chǔ)有多個(gè)3D模型的模型描述參數(shù);或者訪問(wèn)第二數(shù)據(jù)庫(kù),將第二數(shù)據(jù)庫(kù)存儲(chǔ)的每個(gè)3D模型的模型描述參數(shù)和本地存儲(chǔ)路徑轉(zhuǎn)化為實(shí)體控件進(jìn)行顯示,其中,第二數(shù)據(jù)庫(kù)存儲(chǔ)有多個(gè)3D模型的模型描述參數(shù)和本地存儲(chǔ)路徑;或者訪問(wèn)第二數(shù)據(jù)庫(kù)和第一數(shù)據(jù)庫(kù),將第二數(shù)據(jù)庫(kù)和第一數(shù)據(jù)庫(kù)進(jìn)行比對(duì),將第二數(shù)據(jù)庫(kù)存儲(chǔ)的每個(gè)3D模型的模型描述參數(shù)和本地存儲(chǔ)路徑轉(zhuǎn)化為實(shí)體控件進(jìn)行顯示,將第一數(shù)據(jù)庫(kù)存儲(chǔ)的且在第二數(shù)據(jù)庫(kù)中不存在的每個(gè)3D模型的模型描述參數(shù)轉(zhuǎn)化為實(shí)體控件進(jìn)行顯示。
進(jìn)一步地,根據(jù)解析到的信息獲取本地存儲(chǔ)路徑的步驟包括:根據(jù)解析到的信息下載3D模型的文件壓縮包;調(diào)用解壓縮工具對(duì)文件壓縮包進(jìn)行解壓以得到3D模型的文件包;存儲(chǔ)3D模型的文件包至預(yù)定資源庫(kù),其中,3D模型的文件包中包括3D模型的MAX文件;以及獲取3D模型的MAX文件的路徑以得到本地存儲(chǔ)路徑。
進(jìn)一步地,在獲取本地存儲(chǔ)路徑的步驟之后,該方法還包括:解析3D模型的MAX文件以得到3D模型的模型描述參數(shù);采用獲取到的本地存儲(chǔ)路徑和解析得到的3D模型的模型描述參數(shù)更新3D模型對(duì)應(yīng)的實(shí)體控件;以及將獲取到的本地存儲(chǔ)路徑和解析得到的3D模型的模型描述參數(shù)存儲(chǔ)至第二數(shù)據(jù)庫(kù)。
進(jìn)一步地,3D模型的文件包存儲(chǔ)在預(yù)定資源庫(kù)中,本地存儲(chǔ)路徑為3D模型的MAX文件相對(duì)預(yù)定資源庫(kù)的存儲(chǔ)路徑。
進(jìn)一步地,顯示3D模型對(duì)應(yīng)的實(shí)體控件的步驟包括:接收3Ds MAX應(yīng)用程序發(fā)送的3D模型的MAX文件的本地存儲(chǔ)路徑;按照接收到的本地存儲(chǔ)路徑獲取3D模型的MAX文件;解析3D模型的MAX文件以得到3D模型的模型描述參數(shù);將模型描述參數(shù)和本地存儲(chǔ)路徑轉(zhuǎn)換為實(shí)體控件并顯示,在顯示3D模型對(duì)應(yīng)的實(shí)體控件的步驟之后,方法還包括:存儲(chǔ)模型描述參數(shù)和本地存儲(chǔ)路徑至第二數(shù)據(jù)庫(kù)。
進(jìn)一步地,顯示3D模型對(duì)應(yīng)的實(shí)體控件的步驟包括:響應(yīng)于用戶對(duì)本地3D模型執(zhí)行的添加操作,獲取本地3D模型的MAX文件和本地存儲(chǔ)路徑;解析本地3D模型的MAX文件以得到本地3D模型的模型描述參數(shù);將本地3D模型的模型描述參數(shù)和本地3D模型的本地存儲(chǔ)路徑轉(zhuǎn)換為實(shí)體控件并顯示,在顯示3D模型對(duì)應(yīng)的實(shí)體控件的步驟之后,方法還包括:存儲(chǔ)模型描述參數(shù)和本地存儲(chǔ)路徑至第二數(shù)據(jù)庫(kù)。
進(jìn)一步地,導(dǎo)入操作為拖拽實(shí)體控件至3ds MAX應(yīng)用程序的顯示窗口的拖拽操作,通過(guò)DoDragDrop方法實(shí)現(xiàn)拖拽操作,調(diào)用操作系統(tǒng)的API接口向3ds MAX應(yīng)用程序發(fā)送WM_DROPFILES消息的步驟具體為:響應(yīng)于拖拽操作完成,調(diào)用操作系統(tǒng)的API接口向3ds MAX應(yīng)用程序發(fā)送WM_DROPFILES消息。
進(jìn)一步地,調(diào)用操作系統(tǒng)的API接口向3ds MAX應(yīng)用程序發(fā)送WM_DROPFILES消息的步驟包括:響應(yīng)于用戶對(duì)實(shí)體控件所執(zhí)行的導(dǎo)入操作,查找并顯示操作系統(tǒng)開(kāi)啟的3ds MAX應(yīng)用程序;以及響應(yīng)于用戶對(duì)3ds MAX應(yīng)用程序的選擇操作,調(diào)用操作系統(tǒng)的API接口向用戶選擇的3ds MAX應(yīng)用程序發(fā)送WM_DROPFILES消息。
進(jìn)一步地,向3ds MAX應(yīng)用程序發(fā)送WM_DROPFILES消息的步驟具體為:將本地存儲(chǔ)路徑在當(dāng)前進(jìn)程中初始化為一個(gè)預(yù)先定義好的結(jié)構(gòu)體;計(jì)算初始化后的結(jié)構(gòu)體所占用的內(nèi)存大??;在3ds MAX應(yīng)用程序的進(jìn)程中分配一塊與計(jì)算得到的內(nèi)存大小同樣大的空間;將結(jié)構(gòu)體寫(xiě)入分配好的空間;以及將寫(xiě)入結(jié)構(gòu)體的空間作為WM_DROPFILES消息發(fā)送至3ds MAX應(yīng)用程序。
進(jìn)一步地,在解析到本地存儲(chǔ)路徑或獲取到本地存儲(chǔ)路徑之后,調(diào)用操作系統(tǒng)的API接口之前,方法還包括:查詢本地存儲(chǔ)路徑下的文件;判斷本地存儲(chǔ)路徑下的文件是否為3D模型的MAX文件;在方法中,僅當(dāng)本地存儲(chǔ)路徑下的文件為3D模型的MAX文件時(shí),才會(huì)執(zhí)行調(diào)用操作系統(tǒng)的API接口向3ds MAX應(yīng)用程序發(fā)送WM_DROPFILES消息的步驟。
進(jìn)一步地,向3ds MAX應(yīng)用程序發(fā)送WM_DROPFILES消息包括:使用PostMessage方法向3ds MAX應(yīng)用程序發(fā)送WM_DROPFILES消息;或者使用SendMessage方法向3ds MAX應(yīng)用程序發(fā)送WM_DROPFILES消息。
為了實(shí)現(xiàn)上述目的,本發(fā)明提供了一種將3D模型導(dǎo)入3ds MAX的裝置。
該裝置包括:顯示模塊,用于顯示3D模型對(duì)應(yīng)的實(shí)體控件;解析模塊,用于響應(yīng)于用戶對(duì)實(shí)體控件所執(zhí)行的導(dǎo)入操作,解析實(shí)體控件;獲取模塊,用于在解析模塊未解析到3D模型的本地存儲(chǔ)路徑時(shí),獲取本地存儲(chǔ)路徑;以及發(fā)送模塊,用于在解析模塊解析到本地存儲(chǔ)路徑時(shí),或者在獲取模塊獲取到本地存儲(chǔ)路徑時(shí),調(diào)用操作系統(tǒng)的API接口向3ds MAX應(yīng)用程序發(fā)送WM_DROPFILES消息,其中,WM_DROPFILES消息中攜帶有本地存儲(chǔ)路徑,本地存儲(chǔ)路徑用于使3ds MAX應(yīng)用程序獲取到3D模型的MAX文件。
本發(fā)明通過(guò)一種將3D模型導(dǎo)入3ds MAX的方法,首先顯示3D模型對(duì)應(yīng)的實(shí)體控件給用戶,然后響應(yīng)于用戶對(duì)實(shí)體控件所執(zhí)行的導(dǎo)入操作解析實(shí)體控件,解析得到的信息中包括有該3D模型的本地存儲(chǔ)路徑,或者解析得到的信息中不包括有該3D模型的本地存儲(chǔ)路徑,但可通過(guò)間接獲取到3D模型的本地存儲(chǔ)路徑,無(wú)論通過(guò)哪種方式得到本地存儲(chǔ)路徑后,均會(huì)調(diào)用操作系統(tǒng)的API接口向3ds MAX應(yīng)用程序發(fā)送WM_DROPFILES消息,通過(guò)該WM_DROPFILES消息攜帶本地存儲(chǔ)路徑至3ds MAX應(yīng)用程序,以使3ds MAX應(yīng)用程序按照本地存儲(chǔ)路徑獲取3D模型的MAX文件,實(shí)現(xiàn)3D模型導(dǎo)入3ds MAX應(yīng)用程序的目的,從上述過(guò)程可以看出,在導(dǎo)入過(guò)程中,只需用戶對(duì)要導(dǎo)入的3D模型對(duì)應(yīng)的實(shí)體控件執(zhí)行導(dǎo)入操作,即可完成導(dǎo)入,無(wú)需用戶從本地路徑下查找所需的MAX文件,與現(xiàn)有技術(shù)相比,減少了用戶操作步驟,提升用戶體驗(yàn)。
附圖說(shuō)明
圖1為本申請(qǐng)?zhí)峁┑牡谝粚?shí)施例的將3D模型導(dǎo)入3ds MAX的方法的流程圖;
圖2為本申請(qǐng)?zhí)峁┑牡诙?shí)施例的將3D模型導(dǎo)入3ds MAX的方法的流程圖;
圖3為本申請(qǐng)?zhí)峁┑牡谌龑?shí)施例的將3D模型導(dǎo)入3ds MAX的方法的流程圖;
圖4為本申請(qǐng)?zhí)峁┑牡谒膶?shí)施例的將3D模型導(dǎo)入3ds MAX的方法的流程圖;
圖5為本申請(qǐng)?zhí)峁┑牡谖鍖?shí)施例的將3D模型導(dǎo)入3ds MAX的方法的流程圖;
圖6為本申請(qǐng)?zhí)峁┑牡诹鶎?shí)施例的將3D模型導(dǎo)入3ds MAX的方法的流程圖;
圖7為本申請(qǐng)?zhí)峁┑牡谄邔?shí)施例的將3D模型導(dǎo)入3ds MAX的方法的流程圖;
圖8為本申請(qǐng)?zhí)峁┑牡诎藢?shí)施例的將3D模型導(dǎo)入3ds MAX的方法的流程圖;
圖9為本申請(qǐng)?zhí)峁┑牡诰艑?shí)施例的將3D模型導(dǎo)入3ds MAX的裝置的框圖。
具體實(shí)施方式
為使本發(fā)明的上述目的、特征和優(yōu)點(diǎn)能夠更加明顯易懂,在下面的具體實(shí)施方式中,將對(duì)本發(fā)明作進(jìn)一步詳細(xì)的說(shuō)明。
第一實(shí)施例
該實(shí)施例提供了一種將3D模型導(dǎo)入3ds MAX的方法,該方法的執(zhí)行主體為應(yīng)用于3ds MAX應(yīng)用程序的插件,與3ds MAX應(yīng)用程序安裝于同一操作系統(tǒng),通過(guò)該插件與3ds MAX應(yīng)用程序的交互,實(shí)現(xiàn)3D模型導(dǎo)入3ds MAX應(yīng)用程序。參見(jiàn)圖1所示,該方法具體包括如下的步驟S102至步驟S108。
步驟S102:顯示3D模型對(duì)應(yīng)的實(shí)體控件。
該實(shí)體控件由3D模型的模型描述參數(shù)轉(zhuǎn)化而成,或者由3D模型的模型描述參數(shù)和本地存儲(chǔ)路徑轉(zhuǎn)化而成,對(duì)于前一種情況,插件可根據(jù)3D模型的模型描述參數(shù)獲取到3D模型的本地存儲(chǔ)路徑。
一種實(shí)施例中,在遠(yuǎn)端(例如遠(yuǎn)程服務(wù)器一端)設(shè)置第一數(shù)據(jù)庫(kù),該第一數(shù)據(jù)庫(kù)也即線上數(shù)據(jù)庫(kù),該線上數(shù)據(jù)庫(kù)中存儲(chǔ)有多個(gè)3D模型的模型描述參數(shù)。在該步驟中,訪問(wèn)該線上數(shù)據(jù)庫(kù)獲取到各個(gè)3D模型的模型描述參數(shù),然后將每個(gè)3D模型的模型描述參數(shù)轉(zhuǎn)化為實(shí)體控件進(jìn)行顯示。
另一種實(shí)施例中,在本地設(shè)置第二數(shù)據(jù)庫(kù),該第二數(shù)據(jù)庫(kù)也即本地?cái)?shù)據(jù)庫(kù),該本地?cái)?shù)據(jù)庫(kù)中存儲(chǔ)有多個(gè)3D模型的模型描述參數(shù)和本地存儲(chǔ)路徑,當(dāng)插件下載遠(yuǎn)程服務(wù)器上存儲(chǔ)的在線3D模型至本地后,或者插件接收本地3ds MAX應(yīng)用程序生成的3D模型后,或者插件接收到用戶從外接存儲(chǔ)設(shè)備中添加至本地的3D模型后,均會(huì)將3D模型的模型描述參數(shù)和本地存儲(chǔ)路徑存儲(chǔ)至本地?cái)?shù)據(jù)庫(kù)。在該步驟中,訪問(wèn)該本地?cái)?shù)據(jù)庫(kù)獲取到各個(gè)3D模型的模型描述參數(shù)和本地存儲(chǔ)路徑,然后將每個(gè)3D模型的模型描述參數(shù)和本地存儲(chǔ)路徑轉(zhuǎn)化為實(shí)體控件進(jìn)行顯示。
優(yōu)選地,該本地?cái)?shù)據(jù)庫(kù)采用SQLite數(shù)據(jù)庫(kù),占用資源低,內(nèi)存小,并且方便用戶對(duì)數(shù)據(jù)庫(kù)進(jìn)行管理。
第三種實(shí)施例中,同時(shí)在遠(yuǎn)端設(shè)置上述第一數(shù)據(jù)庫(kù),在本地設(shè)置上述第二數(shù)據(jù)庫(kù),在該步驟中,同時(shí)訪問(wèn)所述第二數(shù)據(jù)庫(kù)和所述第一數(shù)據(jù)庫(kù),將兩數(shù)據(jù)庫(kù)進(jìn)行比對(duì),在顯示實(shí)體控件時(shí),將第二數(shù)據(jù)庫(kù)存儲(chǔ)的每個(gè)3D模型的模型描述參數(shù)和本地存儲(chǔ)路徑轉(zhuǎn)化為實(shí)體控件進(jìn)行顯示,將第一數(shù)據(jù)庫(kù)存儲(chǔ)的且在第二數(shù)據(jù)庫(kù)中不存在的每個(gè)3D模型的模型描述參數(shù)轉(zhuǎn)化為實(shí)體控件進(jìn)行顯示。
在上述三種實(shí)施例的任一實(shí)施例中,進(jìn)一步地,用戶通過(guò)3Ds MAX應(yīng)用程序生成新的3D模型后,可發(fā)送至插件進(jìn)行統(tǒng)一管理,此時(shí),該步驟S102還可包括如下的步驟:接收3Ds MAX應(yīng)用程序發(fā)送的3D模型的MAX文件的本地存儲(chǔ)路徑,然后按照接收到的本地存儲(chǔ)路徑獲取3D模型的MAX文件,解析3D模型的MAX文件以得到3D模型的模型描述參數(shù),將模型描述參數(shù)和本地存儲(chǔ)路徑轉(zhuǎn)換為實(shí)體控件并顯示。
進(jìn)一步地,用戶將外接存儲(chǔ)設(shè)備或者遠(yuǎn)程存儲(chǔ)設(shè)備(例如云盤)等位置的3D模型獲取到本地后,可添加至插件進(jìn)行統(tǒng)一管理,此時(shí),該步驟S102還可包括如下的步驟:響應(yīng)于用戶對(duì)本地3D模型執(zhí)行的添加操作,獲取本地3D模型的MAX文件和本地存儲(chǔ)路徑,解析本地3D模型的MAX文件以得到本地3D模型的模型描述參數(shù),將本地3D模型的模型描述參數(shù)和本地3D模型的本地存儲(chǔ)路徑轉(zhuǎn)換為實(shí)體控件并顯示。
3D模型的模型描述參數(shù)可包括3D模型的標(biāo)識(shí)信息,例如3D模型ID、名稱等,優(yōu)選地,還可包括3D模型的屬性信息,例如縮略圖地址、版本信息、點(diǎn)面數(shù)信息、貼圖信息、關(guān)鍵字描述和/或壓縮包大小等。轉(zhuǎn)化后的實(shí)體控件上顯示有3D模型的標(biāo)識(shí)信息,從而用戶能夠從3D模型的實(shí)體控件上區(qū)分和識(shí)別出一個(gè)具體的實(shí)體控件對(duì)應(yīng)的是哪個(gè)3D模型。
優(yōu)選地,通過(guò)縮略圖地址獲取到3D模型的縮略圖,使得轉(zhuǎn)化后的實(shí)體控件上顯示有縮略圖,從而用戶能夠直觀的識(shí)別出3D模型,在導(dǎo)入3D模型之前,用戶通過(guò)插件的顯示窗口內(nèi)即可對(duì)3D模型進(jìn)行預(yù)覽,與現(xiàn)有技術(shù)中在本地路徑下逐層查找MAX文件進(jìn)行預(yù)覽相比,極大地提升了用戶體驗(yàn)。
優(yōu)選地,轉(zhuǎn)化后的實(shí)體控件上還顯示有3D模型的版本信息,從而用戶能夠選擇適合已安裝的3ds MAX應(yīng)用程序的3D模型。
步驟S104:響應(yīng)于用戶對(duì)實(shí)體控件所執(zhí)行的導(dǎo)入操作,解析實(shí)體控件。
通過(guò)上述步驟S102,插件一般顯示有多個(gè)實(shí)體控件,用戶選擇要導(dǎo)入3ds MAX的3D模型對(duì)應(yīng)的實(shí)體控件,并對(duì)其執(zhí)行導(dǎo)入操作后,插件解析被用戶操作的實(shí)體控件。對(duì)于由模型描述參數(shù)轉(zhuǎn)化而成的實(shí)體控件,通過(guò)解析實(shí)體控件,即可獲得該實(shí)體控件對(duì)應(yīng)的3D模型的模型描述參數(shù);對(duì)于由模型描述參數(shù)和本地存儲(chǔ)路徑轉(zhuǎn)化而成的實(shí)體控件,通過(guò)解析實(shí)體控件,即可獲得該實(shí)體控件對(duì)應(yīng)的3D模型的模型描述參數(shù)和本地存儲(chǔ)路徑。
導(dǎo)入操作為預(yù)定的操作,例如用鼠標(biāo)雙擊實(shí)體控件的操作,或者選中實(shí)體控件將實(shí)體控件拖入3ds MAX應(yīng)用程序窗口的操作,或者單擊實(shí)體控件,在顯示的菜單中選擇“導(dǎo)入”的操作等,本申請(qǐng)對(duì)此并不做限定。
步驟S106:若未解析到3D模型的本地存儲(chǔ)路徑,則根據(jù)解析到的信息獲取本地存儲(chǔ)路徑,并在獲取到本地存儲(chǔ)路徑后,執(zhí)行下述步驟S108。
若解析到本地存儲(chǔ)路徑,則跳過(guò)上述步驟S106,直接執(zhí)行下述步驟S108。
對(duì)于未解析到3D模型的本地存儲(chǔ)路徑的情況,通過(guò)解析到的信息來(lái)獲取本地存儲(chǔ)路徑,例如,對(duì)于3D模型的文件包存儲(chǔ)于預(yù)定的運(yùn)營(yíng)服務(wù)器端、還未下載到本地的情況,當(dāng)用戶對(duì)實(shí)體控件進(jìn)行導(dǎo)入時(shí),顯示窗口詢問(wèn)用戶是否要下載,當(dāng)用戶確定要下載時(shí),先通過(guò)解析到的信息下載3D模型的文件包,然后將下載的文件包存儲(chǔ)至本地,即可得到該3D模型的本地存儲(chǔ)路徑;又如,對(duì)于3D模型的文件包存儲(chǔ)于遠(yuǎn)程存儲(chǔ)設(shè)備中時(shí),當(dāng)用戶對(duì)實(shí)體控件進(jìn)行導(dǎo)入時(shí),顯示窗口詢問(wèn)用戶是否要登陸遠(yuǎn)程存儲(chǔ)設(shè)備進(jìn)行獲取,當(dāng)用戶確定要獲取時(shí),先登陸至遠(yuǎn)程存儲(chǔ)設(shè)備,并在遠(yuǎn)程存儲(chǔ)設(shè)備中通過(guò)解析到的信息查詢并下載3D模型的文件包,然后將下載的文件包存儲(chǔ)至本地,即可得到該3D模型的本地存儲(chǔ)路徑。
本申請(qǐng)并不限定于此,只要能夠根據(jù)解析到的信息獲取到本地存儲(chǔ)路徑即可,均在本申請(qǐng)的保護(hù)范圍之內(nèi)。
步驟S108:調(diào)用操作系統(tǒng)的API接口向3ds MAX應(yīng)用程序發(fā)送WM_DROPFILES消息。
本申請(qǐng)中,無(wú)論解析得到本地存儲(chǔ)路徑,還是根據(jù)解析得到的信息獲取到本地存儲(chǔ)路徑,總之在得到本地存儲(chǔ)路經(jīng)之后,均通過(guò)WM_DROPFILES消息將本地存儲(chǔ)路徑發(fā)送至3ds MAX應(yīng)用程序。3ds MAX應(yīng)用程序從WM_DROPFILES消息中獲取到本地存儲(chǔ)路徑后,能夠根據(jù)該本地存儲(chǔ)路徑進(jìn)一步獲取到3D模型的MAX文件,其中,MAX文件為后綴為.max的模型文件,或者為MaxScript腳本文件,3ds MAX應(yīng)用程序獲取到MAX文件后也即完成對(duì)max文件的調(diào)用。
具體地,在發(fā)送WM_DROPFILES消息時(shí),可以使用PostMessage方法向3ds MAX應(yīng)用程序發(fā)送WM_DROPFILES消息,PostMessage負(fù)責(zé)將消息放到消息隊(duì)列中并立即返回。或者,也可以使用SendMessage方法向3ds MAX應(yīng)用程序發(fā)送WM_DROPFILES消息,SendMessage在完成消息發(fā)送后,等到消息處理完成后返回。
采用該實(shí)施例提供的將3D模型導(dǎo)入3ds MAX的方法,從用戶操作步驟上來(lái)講,只需用戶對(duì)要導(dǎo)入的3D模型對(duì)應(yīng)的實(shí)體控件執(zhí)行預(yù)定的導(dǎo)入操作,3ds MAX應(yīng)用程序的插件自動(dòng)與3ds MAX應(yīng)用程序交互,將3D模型的MAX文件的本地存儲(chǔ)路徑發(fā)送給3ds MAX應(yīng)用程序,即可完成3D模型的導(dǎo)入,與現(xiàn)有技術(shù)相比,無(wú)需用戶從本地路徑下逐層查找所需的MAX文件,減少用戶操作步驟,提升用戶體驗(yàn)。
在一種優(yōu)選實(shí)施例中,存入本地的3D模型的文件包,包括從遠(yuǎn)程服務(wù)器獲取的3D模型的文件包、由3ds MAX應(yīng)用程序生成的3D模型的文件包、從外接存儲(chǔ)設(shè)備中導(dǎo)入的3D模型的文件包,均將文件包存入本地的預(yù)定資源庫(kù)中,3D模型的本地存儲(chǔ)路徑設(shè)置為3D模型的MAX文件相對(duì)該預(yù)定資源庫(kù)的存儲(chǔ)路徑,例如,預(yù)定資源庫(kù)的物理路徑為“D/3ds MAX/資源庫(kù)”,3D模型的MAX文件的物理存儲(chǔ)路徑為“D/3ds MAX/資源庫(kù)/交通工具類/汽車/002.max”,則設(shè)置本地存儲(chǔ)路徑為“交通工具類/汽車/002.max”。
采用該種相對(duì)路徑的方式,一種情況下,可將插件獲取本地存儲(chǔ)路徑后,將本地存儲(chǔ)路徑和預(yù)定資源庫(kù)的物理路徑組合,得到3D模型的MAX文件的實(shí)際物理存儲(chǔ)路徑,將該物理存儲(chǔ)路徑,攜帶在WM_DROPFILES消息中發(fā)送至3ds MAX應(yīng)用程序;另一種情況下,也可直接將本地存儲(chǔ)路徑攜帶在WM_DROPFILES消息中發(fā)送至3ds MAX應(yīng)用程序,由3ds MAX應(yīng)用程序?qū)M_DROPFILES消息中的本地存儲(chǔ)路徑和預(yù)定資源庫(kù)的物理路徑組合獲取3D模型的MAX文件。
采用該優(yōu)選實(shí)施例,當(dāng)預(yù)定資源庫(kù)整體遷移時(shí),例如從C盤移動(dòng)到D盤,或不同電腦間的轉(zhuǎn)移,無(wú)需改動(dòng)實(shí)體控件,只需在插件或3ds MAX應(yīng)用程序中重新設(shè)置預(yù)定資源庫(kù)的物理路徑即可。
第二實(shí)施例
該實(shí)施例為在上述第一實(shí)施例基礎(chǔ)上提供的一種將3D模型導(dǎo)入3ds MAX的方法的優(yōu)選實(shí)施例,該優(yōu)選實(shí)施例中方法的執(zhí)行主體與上述第一實(shí)施例方法的執(zhí)行主體相同。在該優(yōu)選實(shí)施例中,用戶先從遠(yuǎn)程服務(wù)器下載3D模型,然后再導(dǎo)入3ds MAX應(yīng)用程序,具體參見(jiàn)圖2所示,該方法包括如下的步驟S202至步驟S218。
步驟S202:響應(yīng)于用戶對(duì)某個(gè)分類執(zhí)行的顯示操作,訪問(wèn)位于服務(wù)器的線上數(shù)據(jù)庫(kù)。
服務(wù)器在滿足預(yù)定條件時(shí),主動(dòng)向安裝插件的客戶端下發(fā)類別信息;也可以為客戶端響應(yīng)于用戶的操作,向服務(wù)器請(qǐng)求3D模型的類別信息后,服務(wù)器響應(yīng)請(qǐng)求而下發(fā)類別信息,在一種實(shí)施例中,在插件安裝于客戶端后首次打開(kāi),并且當(dāng)前處于連網(wǎng)狀態(tài)時(shí),插件自動(dòng)發(fā)送模型分類請(qǐng)求至服務(wù)器,服務(wù)器接收到模型分類請(qǐng)求后,下發(fā)3D模型的多個(gè)分類的類別信息,例如,設(shè)置兩級(jí)分類,一級(jí)分類為動(dòng)物、植物、人物、戶外建筑、交通工具等分類,二級(jí)分類是在一級(jí)分類下進(jìn)一步的分類,如動(dòng)物分類下又分為爬行類、水生類、飛行類、其它等分類。插件接收到上述類別信息后,將一級(jí)分類顯示在第一級(jí)窗體,二級(jí)分類顯示在第二級(jí)窗體。
插件在接收到類別信息后顯示多個(gè)分類,用戶可對(duì)任意一個(gè)分類執(zhí)行顯示操作。當(dāng)用戶對(duì)某一個(gè)分類執(zhí)行顯示操作后,插件響應(yīng)該操作訪問(wèn)線上數(shù)據(jù)庫(kù),獲取信息實(shí)現(xiàn)顯示。
設(shè)置線上數(shù)據(jù)庫(kù)存儲(chǔ)有所有類別的3D模型的模型描述參數(shù),在訪問(wèn)該線上數(shù)據(jù)庫(kù)時(shí),獲取用戶執(zhí)行顯示操作的分類下的全部3D模型的模型描述參數(shù)。
模型描述參數(shù)包括3D模型ID、名稱、縮略圖地址、版本信息、點(diǎn)面數(shù)信息、貼圖信息、關(guān)鍵字描述和壓縮包大小等。
優(yōu)選地,每個(gè)3D模型的模型描述參數(shù)均被封裝為JSON數(shù)據(jù),例如一個(gè)鴕鳥(niǎo)3d模型的模型描述參數(shù)如下:
步驟S204:將從線上數(shù)據(jù)庫(kù)獲取的3D模型的模型描述參數(shù)轉(zhuǎn)換為實(shí)體控件并顯示。
插件將接收到的各個(gè)3D模型的模型描述參數(shù)均轉(zhuǎn)換為一一對(duì)應(yīng)的實(shí)體控件并顯示給用戶。
步驟S206:響應(yīng)于用戶對(duì)實(shí)體控件所執(zhí)行的下載操作,下載3D模型的文件壓縮包。
具體地,用戶從顯示的實(shí)體控件中找到要獲取的3D模型后,點(diǎn)擊該實(shí)體控件。點(diǎn)擊后顯示可針對(duì)該實(shí)體控件所進(jìn)行的操作,例如顯示一個(gè)下拉菜單,菜單中包括“獲取”選項(xiàng),用戶點(diǎn)擊該“獲取”選項(xiàng)時(shí),也即對(duì)該實(shí)體控件執(zhí)行了下載操作;或者,在實(shí)體控件上設(shè)置“下載”按鈕,用戶點(diǎn)擊“下載按鈕”時(shí),也即對(duì)該實(shí)體控件執(zhí)行了下載操作。此時(shí),插件響應(yīng)于該操作,解析實(shí)體控件,得到3D模型的模型描述參數(shù),然后將解析得到的模型描述參數(shù)攜帶在向服務(wù)器發(fā)送的下載3D模型的請(qǐng)求中,例如3D模型名稱,3D模型ID號(hào)等,服務(wù)器解析該請(qǐng)求獲取到模型描述參數(shù),然后將對(duì)應(yīng)于模型描述參數(shù)的3D模型的下載地址下發(fā)至插件,插件請(qǐng)求該下載地址,可獲得3D模型的文件壓縮包。
步驟S208:調(diào)用解壓縮工具對(duì)文件壓縮包進(jìn)行解壓以得到3D模型的文件包。
插件在獲得3D模型的文件包后,自動(dòng)調(diào)用解壓縮工具對(duì)文件壓縮包解壓縮,解壓縮后得到3D模型的文件包。例如,調(diào)用ICSharpCode.SharpZipLib實(shí)現(xiàn)對(duì)文件壓縮包進(jìn)行解壓縮。
步驟S210:存儲(chǔ)3D模型的文件包至預(yù)定資源庫(kù)。
在插件中設(shè)置好預(yù)定資源庫(kù)的物理存儲(chǔ)路徑,將解壓縮后得到的3D模型的文件包存儲(chǔ)至預(yù)定資源庫(kù),其中,3D模型的文件包中包括3D模型的MAX文件。
步驟S212:解析3D模型的MAX文件以得到3D模型的模型描述參數(shù),獲取3D模型的MAX文件的路徑以得到本地存儲(chǔ)路徑。
步驟S214:采用解析得到的模型描述參數(shù)和獲取到的本地存儲(chǔ)路徑更新3D模型對(duì)應(yīng)的實(shí)體控件。
優(yōu)選地,在更新3D模型對(duì)應(yīng)的實(shí)體控件后,插件解析該實(shí)體控件時(shí)可得到3D模型的模型描述參數(shù)和本地存儲(chǔ)路徑。同時(shí),還可修改實(shí)體控件的顯示方式,例如,對(duì)于實(shí)體控件上顯示有縮略圖的情況,可以將縮略圖的顏色由灰色修改為綠色,從而用戶能夠從實(shí)體控件的顯示方式上判斷出該實(shí)體控件對(duì)應(yīng)的3D模型是否已經(jīng)被下載到本地。
步驟S216:響應(yīng)于用戶對(duì)實(shí)體控件所執(zhí)行的導(dǎo)入操作,解析實(shí)體控件。
具體地,用戶從顯示的實(shí)體控件中找到要導(dǎo)入的3D模型后,點(diǎn)擊該實(shí)體控件。點(diǎn)擊后顯示可針對(duì)該實(shí)體控件所進(jìn)行的操作,例如顯示一個(gè)下拉菜單,菜單中包括“導(dǎo)入”選項(xiàng),用戶點(diǎn)擊該“導(dǎo)入”選項(xiàng)時(shí),也即對(duì)該實(shí)體控件執(zhí)行了導(dǎo)入操作,此時(shí),插件響應(yīng)于該操作,解析實(shí)體控件獲得3D模型的模型描述參數(shù)和本地存儲(chǔ)路徑。下述步驟S218參照上述第一實(shí)施例,此處不再贅述。
步驟S218:調(diào)用操作系統(tǒng)的API接口向3ds MAX應(yīng)用程序發(fā)送WM_DROPFILES消息。
采用該實(shí)施例提供的將3D模型導(dǎo)入3ds MAX的方法,能夠?qū)⒃诰€3D模型導(dǎo)入3ds MAX應(yīng)用程序,同時(shí),基于對(duì)在線3D模型資源進(jìn)行的集中整合,用戶獲取一個(gè)在線3D模型時(shí),只需在插件中找到該在線3D模型所屬的分類,然后插件會(huì)自動(dòng)顯示該分類下的3D模型的實(shí)體控件,用戶選定要下載的3D模型后,即可完成下載和解壓縮,與現(xiàn)有技術(shù)中在大量的在線信息中搜索在線3D模型相比,節(jié)省用戶時(shí)間,進(jìn)一步提升用戶體驗(yàn)。
第三實(shí)施例
該實(shí)施例為在上述第一實(shí)施例基礎(chǔ)上提供的一種將3D模型導(dǎo)入3ds MAX的方法的優(yōu)選實(shí)施例,該優(yōu)選實(shí)施例中方法的執(zhí)行主體與上述第一實(shí)施例方法的執(zhí)行主體相同,在該優(yōu)選實(shí)施例中,用戶將3Ds MAX應(yīng)用程序生成的3D模型發(fā)送至插件,再由插件導(dǎo)入3Ds MAX應(yīng)用程序,該實(shí)施例的應(yīng)用場(chǎng)景包括用戶在第一時(shí)間操作3Ds MAX應(yīng)用程序生成的3D模型后先發(fā)送至插件,然后在第二時(shí)間再由插件導(dǎo)入3Ds MAX應(yīng)用程序進(jìn)行進(jìn)一步操作。還包括用戶在操作第一3Ds MAX應(yīng)用程序生成的3D模型后先發(fā)送至插件,然后再由插件導(dǎo)入第二3Ds MAX應(yīng)用程序進(jìn)行進(jìn)一步操作。具體參見(jiàn)圖3所示,該方法包括如下的步驟S302至步驟S314。
步驟S302:接收3Ds MAX應(yīng)用程序發(fā)送的3D模型的MAX文件的本地存儲(chǔ)路徑。
用戶可以將正在制作或打開(kāi)的3D模型通過(guò)“另存為”等操作,將3D模型的文件包存入預(yù)定資源庫(kù),同時(shí),3Ds MAX應(yīng)用程序響應(yīng)該操作將3D模型的MAX文件的本地存儲(chǔ)路徑發(fā)送至插件,實(shí)現(xiàn)將3Ds MAX應(yīng)用程序生成的3D模型添加到本插件。
步驟S304:按照接收到的本地存儲(chǔ)路徑獲取3D模型的MAX文件。
插件接收到3Ds MAX應(yīng)用程序發(fā)送的本地存儲(chǔ)路徑后,按照該路徑可獲取到3D模型的MAX文件,如上述實(shí)施例一指出的,該本地存儲(chǔ)路徑為3D模型的MAX文件相對(duì)本地預(yù)定資源庫(kù)的存儲(chǔ)路徑,插件在接收到本地存儲(chǔ)路徑后,再組合本地預(yù)定資源庫(kù)的物理路徑,進(jìn)而可獲得3D模型的MAX文件。
步驟S306:解析3D模型的MAX文件以得到3D模型的模型描述參數(shù)。
步驟S308:將3D模型的模型描述參數(shù)轉(zhuǎn)換為實(shí)體控件并顯示。
步驟S310:將3D模型的模型描述參數(shù)和本地存儲(chǔ)路徑轉(zhuǎn)換為實(shí)體控件并顯示。
通過(guò)上述的各個(gè)步驟,完成將3Ds MAX應(yīng)用程序生成的3D模型添加到本插件的過(guò)程,下述步驟S312和步驟S314,實(shí)現(xiàn)將3Ds MAX應(yīng)用程序生成的3D模型的反向?qū)胫?Ds MAX應(yīng)用程序,該導(dǎo)入過(guò)程與上述第二實(shí)施例的步驟S216和步驟S218相同,此處不再贅述。例如,將用戶的項(xiàng)目文件拆分成獨(dú)立的模型文件,作為一個(gè)3D模型添加到本插件后,后續(xù)可通過(guò)下述步驟S312和步驟S314再次調(diào)用,方便用戶對(duì)3D模型的使用和管理。
步驟S312:響應(yīng)于用戶對(duì)實(shí)體控件所執(zhí)行的導(dǎo)入操作,解析實(shí)體控件。
步驟S314:調(diào)用操作系統(tǒng)的API接口向3ds MAX應(yīng)用程序發(fā)送WM_DROPFILES消息。
第四實(shí)施例
該實(shí)施例為在上述第一實(shí)施例基礎(chǔ)上提供的一種將3D模型導(dǎo)入3ds MAX的方法的優(yōu)選實(shí)施例,該優(yōu)選實(shí)施例中方法的執(zhí)行主體與上述第一實(shí)施例方法的執(zhí)行主體相同,在該優(yōu)選實(shí)施例中,用戶對(duì)實(shí)體控件進(jìn)行拖拽操作,即可完成3D模型的導(dǎo)入,具體參見(jiàn)圖4所示,該方法包括如下的步驟S402至步驟S408。
步驟S402:顯示3D模型對(duì)應(yīng)的實(shí)體控件。
其中,實(shí)體控件由3D模型的模型描述參數(shù)或者由3D模型的模型描述參數(shù)和本地存儲(chǔ)路徑轉(zhuǎn)化而成,具體顯示過(guò)程參照本申請(qǐng)各個(gè)實(shí)施例的相關(guān)部分,該處不再贅述。
步驟S404:響應(yīng)于用戶拖拽實(shí)體控件至3ds MAX應(yīng)用程序的顯示窗口的拖拽操作,解析實(shí)體控件。
用戶從顯示的實(shí)體控件中找到要導(dǎo)入的3D模型后,選中該實(shí)體控件,實(shí)施拖拽操作,優(yōu)選地,通過(guò)DoDragDrop方法實(shí)現(xiàn)拖拽操作,當(dāng)用戶完成拖放操作時(shí),觸發(fā)插件執(zhí)行該步驟S404。
解析實(shí)體控件后的導(dǎo)入過(guò)程參見(jiàn)各個(gè)實(shí)施例的相關(guān)部分,此處不再贅述。
步驟S406:若未解析到3D模型的本地存儲(chǔ)路徑,則根據(jù)解析到的模型描述參數(shù)獲取本地存儲(chǔ)路徑,并在獲取到本地存儲(chǔ)路徑后,執(zhí)行下述步驟S408。
若解析到本地存儲(chǔ)路徑,則跳過(guò)該步驟S406,直接執(zhí)行下述步驟S408。
步驟S408:響應(yīng)于拖拽操作完成,調(diào)用操作系統(tǒng)的API接口向3ds MAX應(yīng)用程序發(fā)送WM_DROPFILES消息。
第五實(shí)施例
該實(shí)施例為在上述第一實(shí)施例基礎(chǔ)上提供的一種將3D模型導(dǎo)入3ds MAX的方法的優(yōu)選實(shí)施例,該優(yōu)選實(shí)施例中方法的執(zhí)行主體與上述第一實(shí)施例方法的執(zhí)行主體相同,在該優(yōu)選實(shí)施例中,插件自動(dòng)查找已經(jīng)開(kāi)啟的3ds MAX應(yīng)用程序,并將3D模型導(dǎo)入,具體參見(jiàn)圖5所示,該方法包括如下的步驟S502至步驟S510。
步驟S502:顯示3D模型對(duì)應(yīng)的實(shí)體控件。
其中,實(shí)體控件由3D模型的模型描述參數(shù)或者由3D模型的模型描述參數(shù)和本地存儲(chǔ)路徑轉(zhuǎn)化而成,具體顯示過(guò)程參照本申請(qǐng)各個(gè)實(shí)施例的相關(guān)部分,該處不再贅述。
步驟S504:響應(yīng)于用戶對(duì)實(shí)體控件所執(zhí)行的導(dǎo)入操作,解析實(shí)體控件,。
用戶從顯示的實(shí)體控件中找到要導(dǎo)入的3D模型后,點(diǎn)擊該實(shí)體控件,從顯示的菜單中選擇“發(fā)送至MAX”選項(xiàng)時(shí),觸發(fā)插件執(zhí)行該步驟。
解析實(shí)體控件后的導(dǎo)入過(guò)程參見(jiàn)各個(gè)實(shí)施例的相關(guān)部分,此處不再贅述。
步驟S506:若未解析到3D模型的本地存儲(chǔ)路徑,則根據(jù)解析到的模型描述參數(shù)獲取本地存儲(chǔ)路徑,并在獲取到本地存儲(chǔ)路徑后,執(zhí)行下述步驟S508。
若解析到本地存儲(chǔ)路徑,則跳過(guò)該步驟S506,直接執(zhí)行下述步驟S508。
步驟S508:查找和顯示操作系統(tǒng)開(kāi)啟的3ds MAX應(yīng)用程序。
插件通過(guò)查找當(dāng)前系統(tǒng)所開(kāi)啟的3ds MAX程序,并將相應(yīng)標(biāo)題展示給用戶選擇。當(dāng)用戶單擊某一標(biāo)題時(shí),插件響應(yīng)該選擇操作,執(zhí)行下述步驟S510,實(shí)現(xiàn)插件與3ds MAX應(yīng)用程序之間的交互操作,將3D模型發(fā)送至3ds MAX應(yīng)用程序,完成導(dǎo)入。
步驟S510:響應(yīng)于用戶對(duì)3ds MAX應(yīng)用程序的選擇操作,調(diào)用操作系統(tǒng)的API接口向用戶選擇的3ds MAX應(yīng)用程序發(fā)送WM_DROPFILES消息。
第六實(shí)施例
該實(shí)施例為在上述第一實(shí)施例基礎(chǔ)上提供的一種將3D模型導(dǎo)入3ds MAX的方法的優(yōu)選實(shí)施例,該優(yōu)選實(shí)施例中方法的執(zhí)行主體與上述第一實(shí)施例方法的執(zhí)行主體相同,在該優(yōu)選實(shí)施例中,插件通過(guò)結(jié)構(gòu)體的方式實(shí)現(xiàn)與3ds MAX應(yīng)用程序的交互,具體參見(jiàn)圖6所示,該方法包括如下的步驟S602至步驟S622。
步驟S602:顯示3D模型對(duì)應(yīng)的實(shí)體控件。
其中,實(shí)體控件由3D模型的模型描述參數(shù)或者由3D模型的模型描述參數(shù)和本地存儲(chǔ)路徑轉(zhuǎn)化而成,具體顯示過(guò)程參照本申請(qǐng)各個(gè)實(shí)施例的相關(guān)部分,該處不再贅述。
步驟S604:響應(yīng)于用戶對(duì)實(shí)體控件所執(zhí)行的導(dǎo)入操作,解析實(shí)體控件。
該導(dǎo)入操作可以為上述第四實(shí)施例或者上述第五實(shí)施例中描述的操作,此處不再贅述。
步驟S606:若未解析到3D模型的本地存儲(chǔ)路徑,則根據(jù)解析到的模型描述參數(shù)獲取本地存儲(chǔ)路徑,并在獲取到本地存儲(chǔ)路徑后,執(zhí)行下述步驟S608。
若解析到本地存儲(chǔ)路徑,則跳過(guò)該步驟S606,直接執(zhí)行下述步驟S608。
步驟S608:查詢本地存儲(chǔ)路徑下的文件。
步驟S610:判斷本地存儲(chǔ)路徑下的文件是否為3D模型的MAX文件。
步驟S612:當(dāng)本地存儲(chǔ)路徑下的文件為3D模型的MAX文件時(shí),將本地存儲(chǔ)路徑在當(dāng)前進(jìn)程中初始化為一個(gè)預(yù)先定義好的結(jié)構(gòu)體。
步驟S614:當(dāng)本地存儲(chǔ)路徑下的文件不為3D模型的MAX文件時(shí),返回MAX文件不存在的提示信息,流程結(jié)束。
通過(guò)上述步驟S608至步驟S614,在3D模型導(dǎo)入3ds MAX應(yīng)用程序之前,會(huì)對(duì)本地存儲(chǔ)路徑下的文件進(jìn)行篩查,以確保3D模型存在并真實(shí)可用,減少后續(xù)不必要的步驟。
步驟S616:計(jì)算初始化后的結(jié)構(gòu)體所占用的內(nèi)存大小。
步驟S618:在3ds MAX應(yīng)用程序的進(jìn)程中分配一塊與計(jì)算得到的內(nèi)存大小同樣大的空間。
步驟S620:將結(jié)構(gòu)體寫(xiě)入分配好的空間。
步驟S622:調(diào)用操作系統(tǒng)的API接口,將寫(xiě)入結(jié)構(gòu)體的空間作為WM_DROPFILES消息發(fā)送至3ds MAX應(yīng)用程序。
第七實(shí)施例
該實(shí)施例為在上述第一實(shí)施例基礎(chǔ)上提供的一種將3D模型導(dǎo)入3ds MAX的方法的優(yōu)選實(shí)施例,該優(yōu)選實(shí)施例中方法的執(zhí)行主體與上述第一實(shí)施例方法的執(zhí)行主體相同,在該優(yōu)選實(shí)施例中,用戶將位于本地的3D模型添加至插件,再由插件導(dǎo)入3Ds MAX應(yīng)用程序,該實(shí)施例的應(yīng)用場(chǎng)景包括用戶將外接存儲(chǔ)設(shè)備中的3D模型拷貝至本地后,將其添加至插件,再由插件導(dǎo)入3Ds MAX應(yīng)用程序,具體參見(jiàn)圖7所示,該方法包括如下的步驟S702至步驟S710。
步驟S702:響應(yīng)于用戶對(duì)本地3D模型執(zhí)行的添加操作,獲取本地3D模型的MAX文件和本地存儲(chǔ)路徑。
用戶可以將位于本地的3D模型通過(guò)“從插件查找”或“將3D模型的文件包直接拖拽至插件”等執(zhí)行添加操作,插件響應(yīng)該操作獲取該本地3D模型的MAX文件和MAX文件的本地存儲(chǔ)路徑。
步驟S704:解析本地3D模型的MAX文件以得到本地3D模型的模型描述參數(shù);
步驟S706:將本地3D模型的模型描述參數(shù)和本地3D模型的本地存儲(chǔ)路徑轉(zhuǎn)換為實(shí)體控件并顯示。
在插件中顯示實(shí)體控件后,用戶通過(guò)操作該實(shí)體控件可實(shí)現(xiàn)3D模型至3Ds MAX應(yīng)用程序的導(dǎo)入,見(jiàn)下述步驟S708至步驟S710。該導(dǎo)入過(guò)程與上述第二實(shí)施例和第三實(shí)施例的相關(guān)步驟相同,此處不再贅述。
步驟S708:響應(yīng)于用戶對(duì)實(shí)體控件所執(zhí)行的導(dǎo)入操作,解析實(shí)體控件。
步驟S710:調(diào)用操作系統(tǒng)的API接口向3ds MAX應(yīng)用程序發(fā)送WM_DROPFILES消息。
第八實(shí)施例
該實(shí)施例為在上述第一實(shí)施例基礎(chǔ)上提供的一種將3D模型導(dǎo)入3ds MAX的方法的優(yōu)選實(shí)施例,該優(yōu)選實(shí)施例中方法的執(zhí)行主體與上述第一實(shí)施例方法的執(zhí)行主體相同,在該優(yōu)選實(shí)施例中,顯示實(shí)體控件時(shí)同時(shí)訪問(wèn)在線數(shù)據(jù)庫(kù)和本地?cái)?shù)據(jù)庫(kù),具體參見(jiàn)圖8所示,該方法包括如下的步驟S802至步驟S812。
步驟S802:響應(yīng)于用戶對(duì)某個(gè)分類執(zhí)行的顯示操作,訪問(wèn)位于服務(wù)器的線上數(shù)據(jù)庫(kù)和位于本地的本地?cái)?shù)據(jù)庫(kù)。
其中,線上數(shù)據(jù)庫(kù)與本地?cái)?shù)據(jù)庫(kù)的相關(guān)描述見(jiàn)上述第一實(shí)施例。其中,在本地?cái)?shù)據(jù)庫(kù)中存儲(chǔ)的3D模型的模型描述參數(shù)和本地存儲(chǔ)路徑,可以是經(jīng)上述第二實(shí)施例中步驟S206至步驟S212后,將得到的模型描述參數(shù)和本地存儲(chǔ)路徑存儲(chǔ)至本地?cái)?shù)據(jù)庫(kù)中;也可以是經(jīng)上述第三實(shí)施例中步驟S302至步驟S306后,將得到的模型描述參數(shù)和本地存儲(chǔ)路徑存儲(chǔ)至本地?cái)?shù)據(jù)庫(kù)中;也可以為是經(jīng)上述第七實(shí)施例中步驟S702至步驟S704后,將得到的模型描述參數(shù)和本地存儲(chǔ)路徑存儲(chǔ)至本地?cái)?shù)據(jù)庫(kù)中。
步驟S804:將線上數(shù)據(jù)庫(kù)和本地?cái)?shù)據(jù)庫(kù)進(jìn)行比對(duì)。
步驟S806:將本地?cái)?shù)據(jù)庫(kù)存儲(chǔ)的每個(gè)3D模型的模型描述參數(shù)和本地存儲(chǔ)路徑轉(zhuǎn)化為實(shí)體控件進(jìn)行顯示,將線上數(shù)據(jù)庫(kù)存儲(chǔ)的且在本地?cái)?shù)據(jù)庫(kù)中不存在的每個(gè)3D模型的模型描述參數(shù)轉(zhuǎn)化為實(shí)體控件進(jìn)行顯示。
步驟S808:響應(yīng)于用戶對(duì)所述實(shí)體控件所執(zhí)行的導(dǎo)入操作,解析所述實(shí)體控件。
其中,執(zhí)行的導(dǎo)入操作可以為上述第四實(shí)施例中描述的導(dǎo)入操作,也可以是上述第五實(shí)施例中描述的導(dǎo)入操作。
步驟S810:若未解析到3D模型的本地存儲(chǔ)路徑,則根據(jù)解析到的信息獲取本地存儲(chǔ)路徑,并在獲取到本地存儲(chǔ)路徑后,執(zhí)行下述步驟S812。
當(dāng)用戶執(zhí)行導(dǎo)入操作的實(shí)體控件是由3D模型的模型描述參數(shù)轉(zhuǎn)化而成的,也即,是由線上數(shù)據(jù)庫(kù)中存儲(chǔ)的模型描述參數(shù)轉(zhuǎn)化而成的,解析實(shí)體控件后僅得到模型描述參數(shù),在該步驟中,獲取本地存儲(chǔ)路徑時(shí),先根據(jù)模型描述參數(shù)從服務(wù)器下載3D模型的文件壓縮包,并在下載后解壓存儲(chǔ)至本地,以獲得本地存儲(chǔ)路徑,相關(guān)過(guò)程可參照上述第二實(shí)施例中步驟S206至步驟S212。
優(yōu)選地,在獲得本地存儲(chǔ)路徑后,可采用解析得到的模型描述參數(shù)和獲取到的本地存儲(chǔ)路徑更新3D模型對(duì)應(yīng)的實(shí)體控件,保證再次導(dǎo)入時(shí)直接通過(guò)解析實(shí)體控件獲得本地存儲(chǔ)路徑。
進(jìn)一步優(yōu)選地,將獲取到的本地存儲(chǔ)路徑和解析得到的3D模型的模型描述參數(shù)存儲(chǔ)至本地?cái)?shù)據(jù)庫(kù),以保證下次執(zhí)行步驟S802至步驟S806時(shí),顯示的實(shí)體控件由本地存儲(chǔ)路徑和模型描述參數(shù)轉(zhuǎn)化而成。
當(dāng)用戶執(zhí)行導(dǎo)入操作的實(shí)體控件是由3D模型的模型描述參數(shù)和本地存儲(chǔ)路徑轉(zhuǎn)化而成的,也即,是由本地?cái)?shù)據(jù)庫(kù)中存儲(chǔ)的模型描述參數(shù)和本地存儲(chǔ)路徑轉(zhuǎn)化而成的,解析實(shí)體控件后可得到本地存儲(chǔ)路徑,此時(shí)跳過(guò)上述步驟S810,直接執(zhí)行下述步驟S812。
步驟S812:查詢和判斷本地存儲(chǔ)路徑下的文件的情況,在本地存儲(chǔ)路徑下的文件為3D模型的MAX文件時(shí),調(diào)用操作系統(tǒng)的API接口向用戶選擇的3ds MAX應(yīng)用程序發(fā)送WM_DROPFILES消息。
其中,該步驟具體可參見(jiàn)上述第六實(shí)施例中的步驟S608至步驟S622,此處不再贅述。
以上為本申請(qǐng)?zhí)峁┑膶?D模型導(dǎo)入3ds MAX的方法的實(shí)施例,本申請(qǐng)還提供了將3D模型導(dǎo)入3ds MAX的裝置,該將3D模型導(dǎo)入3ds MAX的裝置用于執(zhí)行上述任意一種將3D模型導(dǎo)入3ds MAX的方法。
第九實(shí)施例
該實(shí)施例提供了一種將3D模型導(dǎo)入3ds MAX的裝置,該裝置為應(yīng)用于3ds MAX應(yīng)用程序的插件,與3ds MAX應(yīng)用程序安裝于同一操作系統(tǒng),通過(guò)該插件與3ds MAX應(yīng)用程序的交互,實(shí)現(xiàn)3D模型導(dǎo)入3ds MAX應(yīng)用程序。參見(jiàn)圖9所示,該裝置具體包括顯示模塊90、解析模塊92、獲取模塊94和發(fā)送模塊96。
其中,顯示模塊90用于顯示3D模型對(duì)應(yīng)的實(shí)體控件。
解析模塊92用于響應(yīng)于用戶對(duì)實(shí)體控件所執(zhí)行的導(dǎo)入操作,解析實(shí)體控件。
獲取模塊94用于在解析模塊92未解析到3D模型的本地存儲(chǔ)路徑時(shí),獲取本地存儲(chǔ)路徑。
發(fā)送模塊96用于在解析模塊92解析到本地存儲(chǔ)路徑時(shí),或者在獲取模塊94獲取到本地存儲(chǔ)路徑時(shí),調(diào)用操作系統(tǒng)的API接口向3ds MAX應(yīng)用程序發(fā)送WM_DROPFILES消息。
其中,WM_DROPFILES消息中攜帶有本地存儲(chǔ)路徑,該本地存儲(chǔ)路徑用于使3ds MAX應(yīng)用程序獲取3D模型的MAX文件。
優(yōu)選地,顯示模塊90在顯示3D模型對(duì)應(yīng)的實(shí)體控件時(shí),可具體執(zhí)行以下步驟:
訪問(wèn)第一數(shù)據(jù)庫(kù),將第一數(shù)據(jù)庫(kù)存儲(chǔ)的每個(gè)3D模型的模型描述參數(shù)轉(zhuǎn)化為實(shí)體控件進(jìn)行顯示,其中,第一數(shù)據(jù)庫(kù)存儲(chǔ)有多個(gè)3D模型的模型描述參數(shù);或者
訪問(wèn)第二數(shù)據(jù)庫(kù),將第二數(shù)據(jù)庫(kù)存儲(chǔ)的每個(gè)3D模型的模型描述參數(shù)和本地存儲(chǔ)路徑轉(zhuǎn)化為實(shí)體控件進(jìn)行顯示,其中,第二數(shù)據(jù)庫(kù)存儲(chǔ)有多個(gè)3D模型的模型描述參數(shù)和本地存儲(chǔ)路徑;或者
訪問(wèn)第二數(shù)據(jù)庫(kù)和第一數(shù)據(jù)庫(kù),將第二數(shù)據(jù)庫(kù)和第一數(shù)據(jù)庫(kù)進(jìn)行比對(duì),將第二數(shù)據(jù)庫(kù)存儲(chǔ)的每個(gè)3D模型的模型描述參數(shù)和本地存儲(chǔ)路徑轉(zhuǎn)化為實(shí)體控件進(jìn)行顯示,將第一數(shù)據(jù)庫(kù)存儲(chǔ)的且在第二數(shù)據(jù)庫(kù)中不存在的每個(gè)3D模型的模型描述參數(shù)轉(zhuǎn)化為實(shí)體控件進(jìn)行顯示。
優(yōu)選地,獲取模塊94包括:壓縮包下載模塊,用于下載3D模型的文件壓縮包;解壓工具調(diào)用模塊,用于調(diào)用解壓縮工具對(duì)文件壓縮包進(jìn)行解壓以得到3D模型的文件包;第一存儲(chǔ)模塊,用于存儲(chǔ)3D模型的文件包至預(yù)定資源庫(kù),其中,3D模型的文件包中包括3D模型的MAX文件;路徑獲取模塊,用于獲取3D模型的MAX文件的路徑以得到本地存儲(chǔ)路徑。
優(yōu)選地,該裝置還包括,第一參數(shù)解析模塊,用于解析3D模型的MAX文件以得到3D模型的模型描述參數(shù);第一控件轉(zhuǎn)換顯示模塊,用于采用獲取到的本地存儲(chǔ)路徑和解析得到的3D模型的模型描述參數(shù)更新3D模型對(duì)應(yīng)的實(shí)體控件。該裝置還包括第二存儲(chǔ)模塊,用于將獲取到的本地存儲(chǔ)路徑和解析得到的3D模型的模型描述參數(shù)存儲(chǔ)至第二數(shù)據(jù)庫(kù)。
優(yōu)選地,顯示模塊包括:服務(wù)器接收模塊,用于接收服務(wù)器發(fā)送的3D模型的模型描述參數(shù);以及實(shí)體控件轉(zhuǎn)換模塊,用于將3D模型的模型描述參數(shù)轉(zhuǎn)換為實(shí)體控件并顯示。
優(yōu)選地,3D模型的文件包存儲(chǔ)在預(yù)定資源庫(kù)中,本地存儲(chǔ)路徑為3D模型的MAX文件相對(duì)預(yù)定資源庫(kù)的存儲(chǔ)路徑。
優(yōu)選地,顯示模塊包括:應(yīng)用程序接收模塊,用于接收3Ds MAX應(yīng)用程序發(fā)送的3D模型的MAX文件的本地存儲(chǔ)路徑;MAX文件獲取模塊,用于按照接收到的本地存儲(chǔ)路徑獲取3D模型的MAX文件;第二參數(shù)解析模塊,用于解析3D模型的MAX文件以得到3D模型的模型描述參數(shù);第二控件轉(zhuǎn)換顯示模塊,用于將3D模型的模型描述參數(shù)和本地存儲(chǔ)路徑轉(zhuǎn)換為實(shí)體控件并顯示。該裝置還包括第三存儲(chǔ)模塊,用于在第二控件轉(zhuǎn)換顯示模塊顯示3D模型對(duì)應(yīng)的實(shí)體控件之后,存儲(chǔ)模型描述參數(shù)和MAX文件的本地存儲(chǔ)路徑至第二數(shù)據(jù)庫(kù)。
優(yōu)選地,顯示模塊包括:本地添加模塊,用于響應(yīng)于用戶對(duì)本地3D模型執(zhí)行的添加操作,獲取本地3D模型的MAX文件和本地存儲(chǔ)路徑;第三參數(shù)解析模塊,用于解析本地3D模型的MAX文件以得到本地3D模型的模型描述參數(shù);第三控件轉(zhuǎn)換顯示模塊,用于將本地3D模型的模型描述參數(shù)和本地3D模型的本地存儲(chǔ)路徑轉(zhuǎn)換為實(shí)體控件并顯示。該裝置還包括第四存儲(chǔ)模塊,用于在第二控件轉(zhuǎn)換顯示模塊顯示3D模型對(duì)應(yīng)的實(shí)體控件之后,存儲(chǔ)模型描述參數(shù)和MAX文件的本地存儲(chǔ)路徑至第二數(shù)據(jù)庫(kù)。
在顯示3D模型對(duì)應(yīng)的實(shí)體控件的步驟之后,方法還包括:存儲(chǔ)模型描述參數(shù)和本地存儲(chǔ)路徑至第二數(shù)據(jù)庫(kù)。
優(yōu)選地,導(dǎo)入操作為拖拽實(shí)體控件至3ds MAX應(yīng)用程序的顯示窗口的拖拽操作,通過(guò)DoDragDrop方法實(shí)現(xiàn)拖拽操作,發(fā)送模塊執(zhí)行的步驟具體為響應(yīng)于拖拽操作完成,調(diào)用操作系統(tǒng)的API接口向3ds MAX應(yīng)用程序發(fā)送WM_DROPFILES消息。
優(yōu)選地,發(fā)送模塊包括:程序查找顯示模塊,用于響應(yīng)于用戶對(duì)實(shí)體控件所執(zhí)行的導(dǎo)入操作,查找并顯示操作系統(tǒng)開(kāi)啟的3ds MAX應(yīng)用程序;接口調(diào)用模塊,用于響應(yīng)于用戶對(duì)3ds MAX應(yīng)用程序的選擇操作,調(diào)用操作系統(tǒng)的API接口向用戶選擇的3ds MAX應(yīng)用程序發(fā)送WM_DROPFILES消息。
優(yōu)選地,發(fā)送模塊包括:結(jié)構(gòu)體初始化模塊,用于將本地存儲(chǔ)路徑在當(dāng)前進(jìn)程中初始化為一個(gè)預(yù)先定義好的結(jié)構(gòu)體;內(nèi)存計(jì)算模塊,用于計(jì)算初始化后的結(jié)構(gòu)體所占用的內(nèi)存大??;空間分配模塊,用于在3ds MAX應(yīng)用程序的進(jìn)程中分配一塊與計(jì)算得到的內(nèi)存大小同樣大的空間;空間寫(xiě)入模塊,用于將結(jié)構(gòu)體寫(xiě)入分配好的空間;以及調(diào)用操作系統(tǒng)的API接口將寫(xiě)入結(jié)構(gòu)體的空間作為WM_DROPFILES消息發(fā)送至3ds MAX應(yīng)用程序。
優(yōu)選地,該裝置還包括:查詢模塊,用于在解析模塊解析到本地存儲(chǔ)路徑或獲取模塊獲取到本地存儲(chǔ)路徑之后,調(diào)用操作系統(tǒng)的API接口之前,查詢本地存儲(chǔ)路徑下的文件;判斷模塊,用于判斷本地存儲(chǔ)路徑下的文件是否為3D模型的MAX文件;其中,僅當(dāng)本地存儲(chǔ)路徑下的文件為3D模型的MAX文件時(shí),發(fā)送模塊才會(huì)調(diào)用操作系統(tǒng)的API接口向3ds MAX應(yīng)用程序發(fā)送WM_DROPFILES消息。
優(yōu)選地,發(fā)送模塊在向3ds MAX應(yīng)用程序發(fā)送WM_DROPFILES消息時(shí),使用PostMessage方法向3ds MAX應(yīng)用程序發(fā)送WM_DROPFILES消息;或者使用SendMessage方法向3ds MAX應(yīng)用程序發(fā)送WM_DROPFILES消息。
優(yōu)選地,數(shù)據(jù)庫(kù)為SQLite數(shù)據(jù)庫(kù)。
對(duì)于前述的各方法實(shí)施例,為了簡(jiǎn)單描述,故將其都表述為一系列的動(dòng)作組合,但是本領(lǐng)域的技術(shù)人員應(yīng)該知悉,本發(fā)明并不受所描述的動(dòng)作順序的限制,因?yàn)楦鶕?jù)本發(fā)明,某些步驟可以采用其他順去或同時(shí)執(zhí)行;其次,本領(lǐng)域技術(shù)人員也應(yīng)該知悉,上述方法實(shí)施例均屬于優(yōu)選實(shí)施例,所涉及的動(dòng)作和模塊并不一定是本發(fā)明所必須的。
對(duì)于前述的各裝置實(shí)施例,為了簡(jiǎn)單描述,故將其都表述為一系列的模塊組合,但是本領(lǐng)域的技術(shù)人員應(yīng)該知悉,本發(fā)明并不受所描述的模塊組合的限制,因?yàn)楦鶕?jù)本發(fā)明,某些模塊可以采用其他模塊執(zhí)行;其次,本領(lǐng)域技術(shù)人員也應(yīng)該知悉,上述裝置實(shí)施例均屬于優(yōu)選實(shí)施例,所涉及的模塊并不一定是本發(fā)明所必須的。
本說(shuō)明書(shū)中的各個(gè)實(shí)施例均采用遞進(jìn)的方式描述,每個(gè)實(shí)施例重點(diǎn)說(shuō)明的都是與其他實(shí)施例的不同之處,各個(gè)實(shí)施例之間相同相似的部分互相參見(jiàn)即可。對(duì)于裝置實(shí)施例而言,由于其與方法實(shí)施例基本相似,所以描述的比較簡(jiǎn)單,相關(guān)之處參見(jiàn)方法實(shí)施例的部分說(shuō)明即可。
以上對(duì)本發(fā)明所提供的一種將3D模型導(dǎo)入3ds MAX的方法和裝置進(jìn)行了詳細(xì)介紹,本文中應(yīng)用了具體個(gè)例對(duì)本發(fā)明的原理及實(shí)施方式進(jìn)行了闡述,以上實(shí)施例的說(shuō)明只是用于幫助理解本發(fā)明的方法及其核心思想;同時(shí),對(duì)于本領(lǐng)域的一般技術(shù)人員,依據(jù)本發(fā)明的思想,在具體實(shí)施方式及應(yīng)用范圍上均會(huì)有改變之處,綜上所述,本說(shuō)明書(shū)內(nèi)容不應(yīng)理解為對(duì)本發(fā)明的限制。