吳保文,王勇堅,羅 勇
(1.文山學(xué)院 信息科學(xué)學(xué)院,云南 文山 663099;2.文山學(xué)院 藝術(shù)學(xué)院,云南 文山 663099)
隨著虛擬現(xiàn)實技術(shù)的發(fā)展,各類主題的數(shù)字展廳的應(yīng)用層出不窮。中國的陶瓷文化歷史悠久,它的存在可以追溯到公元前8000年至2500年,是中華民族的發(fā)展史中重要的組成部分,它代表著中國歷史各個時期人們的審美。陶瓷是珍貴易碎的,將陶瓷藝術(shù)品應(yīng)用于三維數(shù)字化技術(shù)的展示在文化遺產(chǎn)保護的行業(yè)內(nèi)得到廣泛認可。
本展廳是以陶瓷文化展廳設(shè)計為例,使用3ds Max構(gòu)建三維模型,在uniyt3D中實現(xiàn)漫游和交互的同時,把展廳風(fēng)格的自由變換作為研究重點,實現(xiàn)了在不打開和編輯展廳源文件的情況下,只要通過菜單式選擇,就可以實現(xiàn)展廳不同風(fēng)格材質(zhì)的選擇與變換。
以陶瓷展品為主題的虛擬展廳首先使用AutoCAD繪制平面圖;然后在3ds Max中利用3d捕捉開關(guān)的圖形按鈕對平面圖中的直線進行擠出命令操作,按平面圖建立三維墻體,并建立三維模型,將完成的展廳三維模型導(dǎo)出為FBX格式;最后將在Unity 3D中為展廳添加材質(zhì)和燈光、實現(xiàn)漫游和展廳風(fēng)格的變換[1]。開發(fā)思路及流程如圖1所示:
圖1 陶瓷展廳開發(fā)流程
展廳中的墻面、地板、吊頂和展臺表面均是展廳風(fēng)格變換的對象,本展廳中共有28個對象實例需要進行材質(zhì)的變換,把這些實例分別命名為a1、a2、a3……an……a28。
材質(zhì)變換功能的實現(xiàn),首先在場景中建立18個(根據(jù)開發(fā)需要自行確定可供用戶選擇的材質(zhì)數(shù)量)不同顏色、紋理和風(fēng)格的實例作為展廳風(fēng)格變換的材質(zhì)庫,并分別命名為Y1、Y2、Y3……Yn……Y18。
利用Unity 3D的按鈕組件創(chuàng)建18個按鈕,并定義anniu_01、anniu_02、……anniu_n、……anniu_18函數(shù),用于選擇材質(zhì)Y1、Y2、Y3……Yn……Y18。修改各按鈕的on click事件屬性,建立changeColor文件與按鈕的關(guān)聯(lián),即當(dāng)鼠標(biāo)點擊按鈕時自動加載changeColor文件中對應(yīng)的anniu_n函數(shù)。
為展廳創(chuàng)建一JSP腳本文件并命名為changeColor。本展廳實例材質(zhì)的選擇與變換通過各按鈕加載此文件實現(xiàn),changeColor文件中程序的推導(dǎo)及實現(xiàn)步驟如下:
1)定義兩個Color類型的變量oldcolor和newcolor,用來存放物體原來的和新替換的顏色或材質(zhì);
2)定義兩個布爾型變量jihuo和tj。jihuo作為是否選定各材質(zhì)對應(yīng)按鈕的判斷,并賦初值為否,即在未點擊裝修材質(zhì)對應(yīng)的按鈕之前,不能對變換實體an進行材質(zhì)更改。變量tj表示選定變換的實例狀態(tài),用于判斷用戶需要更改的物體是否選定,即用戶可以修改tj為真true的物體材質(zhì)。
定義一個激活函數(shù)jihuo_daima(),當(dāng)按鈕按下時jihuo的值變?yōu)閠rue,表示可對展廳實例進行修改:
3)定義一個函數(shù)Start(),將Renderer組件下material中對應(yīng)的顏色值賦給oldcolor的作為初值:
4)定義anniu_01、anniu_02、……anniu_n、……anniu_18函數(shù),分別作為18個材質(zhì)按鈕的觸發(fā)事件:
pd=1則表示按下的是第一個按鈕anniu_01、pd=2則表示按下的是第二個按鈕anniu_02,以此類推,pd=n則表示按下的是第n個按鈕;
newcolor=GameObject.Find("Yn").GetComponent(Renderer).material.color
表示把場景中命名為“Yn”物體的顏色或材質(zhì)值存儲到newcolor變量中。如果pd=1,則newcolor的值為Y1的顏色,pd=2則newcolor的值為Y2的顏色值。每個按鈕的在點擊時都要響應(yīng)對應(yīng)的anniu_n函數(shù)。
5)定義鼠標(biāo)劃過事件函數(shù)OnMouseOver(),用于修改鼠標(biāo)劃過的某一場景實例狀態(tài),將其顏色變?yōu)榧t色:
6)定義鼠標(biāo)按下事件函數(shù)OnMouseDown(),用于修改鼠標(biāo)按下某一場景實例時,將其顏色變?yōu)榘咨?/p>
7)定義鼠標(biāo)退出事件函數(shù)OnMouseExit( ),用于實現(xiàn)場景實例顏色或材質(zhì)的變換:
當(dāng)鼠標(biāo)退出時判斷tj為false或者pd為0,表示展廳實例或按鈕未被選中,展廳實例則保留原來的顏色或材質(zhì);當(dāng)判斷tj為true并且pd不為0,即表示展廳某一實例和按鈕同時被選中,展廳實例將進行與按鈕相對應(yīng)的顏色或材質(zhì)替換。
8)每一次完成展廳實例材質(zhì)的變換都需要將激活函數(shù)回復(fù)到未激活狀態(tài),等待下一個展廳實例的選擇與材質(zhì)變換。
本文在Unity 3D中通過JSP編程實現(xiàn)了用戶通過菜單操作與展廳進行交互控制,從而實現(xiàn)了用戶對展廳風(fēng)格的一鍵式定制。此方法從材質(zhì)變換的角度實現(xiàn)了對展廳的一次建模多次使用,為提高虛擬博物館的重復(fù)利用率提供了思路。
[1] 吳保文.基于3ds Max與Unity3D的虛擬展廳圖片更新的實現(xiàn).文山學(xué)院學(xué)院學(xué)報[J].2016(6):56-58.
[2] 年愛華.基于Unity3D的三維虛擬展廳的設(shè)計與實現(xiàn).廣東交通職業(yè)技術(shù)學(xué)院學(xué)報[J].2015(8):55-57.
[3] 吳亞峰.Unity開發(fā)實戰(zhàn)詳解[M].人民郵電出版社,2013.12.
[4] 朱惠娟.基于Unity3D的虛擬漫游系統(tǒng)[J]. 2012(12):56-58.