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