吳保文,王勇堅,羅 勇
(1.文山學院 信息科學學院,云南 文山 663099;2.文山學院 藝術學院,云南 文山 663099)
隨著虛擬現實技術的發展,各類主題的數字展廳的應用層出不窮。中國的陶瓷文化歷史悠久,它的存在可以追溯到公元前8000年至2500年,是中華民族的發展史中重要的組成部分,它代表著中國歷史各個時期人們的審美。陶瓷是珍貴易碎的,將陶瓷藝術品應用于三維數字化技術的展示在文化遺產保護的行業內得到廣泛認可。
本展廳是以陶瓷文化展廳設計為例,使用3ds Max構建三維模型,在uniyt3D中實現漫游和交互的同時,把展廳風格的自由變換作為研究重點,實現了在不打開和編輯展廳源文件的情況下,只要通過菜單式選擇,就可以實現展廳不同風格材質的選擇與變換。
以陶瓷展品為主題的虛擬展廳首先使用AutoCAD繪制平面圖;然后在3ds Max中利用3d捕捉開關的圖形按鈕對平面圖中的直線進行擠出命令操作,按平面圖建立三維墻體,并建立三維模型,將完成的展廳三維模型導出為FBX格式;最后將在Unity 3D中為展廳添加材質和燈光、實現漫游和展廳風格的變換[1]。開發思路及流程如圖1所示:

圖1 陶瓷展廳開發流程
展廳中的墻面、地板、吊頂和展臺表面均是展廳風格變換的對象,本展廳中共有28個對象實例需要進行材質的變換,把這些實例分別命名為a1、a2、a3……an……a28。
材質變換功能的實現,首先在場景中建立18個(根據開發需要自行確定可供用戶選擇的材質數量)不同顏色、紋理和風格的實例作為展廳風格變換的材質庫,并分別命名為Y1、Y2、Y3……Yn……Y18。
利用Unity 3D的按鈕組件創建18個按鈕,并定義anniu_01、anniu_02、……anniu_n、……anniu_18函數,用于選擇材質Y1、Y2、Y3……Yn……Y18。修改各按鈕的on click事件屬性,建立changeColor文件與按鈕的關聯,即當鼠標點擊按鈕時自動加載changeColor文件中對應的anniu_n函數。
為展廳創建一JSP腳本文件并命名為changeColor。本展廳實例材質的選擇與變換通過各按鈕加載此文件實現,changeColor文件中程序的推導及實現步驟如下:
1)定義兩個Color類型的變量oldcolor和newcolor,用來存放物體原來的和新替換的顏色或材質;
2)定義兩個布爾型變量jihuo和tj。jihuo作為是否選定各材質對應按鈕的判斷,并賦初值為否,即在未點擊裝修材質對應的按鈕之前,不能對變換實體an進行材質更改。變量tj表示選定變換的實例狀態,用于判斷用戶需要更改的物體是否選定,即用戶可以修改tj為真true的物體材質。
定義一個激活函數jihuo_daima(),當按鈕按下時jihuo的值變為true,表示可對展廳實例進行修改:

3)定義一個函數Start(),將Renderer組件下material中對應的顏色值賦給oldcolor的作為初值:

4)定義anniu_01、anniu_02、……anniu_n、……anniu_18函數,分別作為18個材質按鈕的觸發事件:

pd=1則表示按下的是第一個按鈕anniu_01、pd=2則表示按下的是第二個按鈕anniu_02,以此類推,pd=n則表示按下的是第n個按鈕;
newcolor=GameObject.Find("Yn").GetComponent(Renderer).material.color
表示把場景中命名為“Yn”物體的顏色或材質值存儲到newcolor變量中。如果pd=1,則newcolor的值為Y1的顏色,pd=2則newcolor的值為Y2的顏色值。每個按鈕的在點擊時都要響應對應的anniu_n函數。
5)定義鼠標劃過事件函數OnMouseOver(),用于修改鼠標劃過的某一場景實例狀態,將其顏色變為紅色:

6)定義鼠標按下事件函數OnMouseDown(),用于修改鼠標按下某一場景實例時,將其顏色變為白色:

7)定義鼠標退出事件函數OnMouseExit( ),用于實現場景實例顏色或材質的變換:

當鼠標退出時判斷tj為false或者pd為0,表示展廳實例或按鈕未被選中,展廳實例則保留原來的顏色或材質;當判斷tj為true并且pd不為0,即表示展廳某一實例和按鈕同時被選中,展廳實例將進行與按鈕相對應的顏色或材質替換。
8)每一次完成展廳實例材質的變換都需要將激活函數回復到未激活狀態,等待下一個展廳實例的選擇與材質變換。

本文在Unity 3D中通過JSP編程實現了用戶通過菜單操作與展廳進行交互控制,從而實現了用戶對展廳風格的一鍵式定制。此方法從材質變換的角度實現了對展廳的一次建模多次使用,為提高虛擬博物館的重復利用率提供了思路。
[1] 吳保文.基于3ds Max與Unity3D的虛擬展廳圖片更新的實現.文山學院學院學報[J].2016(6):56-58.
[2] 年愛華.基于Unity3D的三維虛擬展廳的設計與實現.廣東交通職業技術學院學報[J].2015(8):55-57.
[3] 吳亞峰.Unity開發實戰詳解[M].人民郵電出版社,2013.12.
[4] 朱惠娟.基于Unity3D的虛擬漫游系統[J]. 2012(12):56-58.