周海洋


摘 ? 要:AR(Augmented Reality)增強現實技術開發門檻低且具有很好的沉浸性,在教育方面有很好的應用前景。該文主要研究AR技術在高中化學教學中的應用,利用Unity3D和Vuforia的AR技術支持實現相關化學知識的AR立體展示。并借助C#語言實現一定的交互功能。借助AR的可視化、交互性能夠激發學生的學習興趣,提高學習效果。
關鍵詞:Unity 3D;AR增強現實;3D模型
中圖分類號:TP391 ? ? ? ? ? 文獻標志碼:A
0 引言
AR增強現實技術現已廣泛應用到軍事、銷售、娛樂、教育、技術、傳媒、旅游、醫療等領域。相較VR虛擬現實技術來說,AR更加親民,使用場景更加廣泛,只需要一部智能手機,便可以享受AR增強現實技術帶來的全新的視覺體驗。同時AR技術開發門檻和開發成本更低,開發者可以快速的開發出一個AR應用的實例。該文研究AR技術在高中化學教學中的應用,借助3ds Max建立相關的3D模型,利用Unity3D游戲引擎和C#編程語言實現軟件簡單的UI界面設計和簡單的人機交互功能,最后利用Vuforia的技術支持實現3D模型在現實環境中的AR立體展示。
1 問題的分析與3D模型的建立
選擇3ds Max建立3D模型,因為3ds Max能夠導出多種格式的文件,且Unity能夠很好的支持這些格式,建立好的模型可以直接導入Unity進行后續工作,操作簡單、工作高效。
這里以比較典型的2個知識點為例。
(1)乙醇和乙酸在濃硫酸加熱環境下的酯化反應,一個分子的乙醇和一個分子的乙酸發生酯化反應之后產生一個分子的乙酸乙酯和一個分子的水,但是學生初學這部分的時候往往不能注意水分子是乙酸分子羧基中的羥基和乙醇分子羥基中的氫原子結合而成的,往往想當然的認為這個水分子是乙醇的羥基的乙酸羧基中的一個氫原子構成的。
(2)判斷一個有機分子中的原子是否都在一個平面內,同學們往往要死背硬記那幾個例子:乙烯、苯環、乙炔中所有的原子都在同一個平面內。同學們往往不能舉一反三,象2個苯環組成的聯苯中所有的原子可能處于同一平面,也有可能不處于同一平面。根據上述,利用3ds Max分別建立乙醇、乙酸、乙酸乙酯、乙烯、苯環、乙炔、聯苯的球棍模型以及乙醇和乙酸反應的球棍模型動畫。下面以乙酸的球棍模型為例演示操作流程,乙酸的球棍模型如圖1所示。
2 模型的AR顯示
目前Unity引擎所兼容的主流AR SDK有國產的Easy AR、蘋果公司的AR Kit、高通公司的Vuforia和谷歌的AR Core。這里采用識別速度更快、更穩定的Vuforia。
首先登陸Vuforia的官網:https://developer.vuforia.com。然后創建一個這個工程所需要的Database,并且獲取這個Database的License Key。接著上傳需要識別的對象Target Image,最后下載這個Database,并且將之導入Unity編輯器。具體流程如圖2所示。完成上述操作之后,還要對Unity編輯器進行一些簡單的設置,才能流暢的進行AR應用的開發。首先,在Player Settings的Inspector面板下找到Settings for Android,勾選Virtual Reality Supported和Vuforia Augmented Realit兩欄即可。然后在場景面板中創建一個ARCamera,打開ARCamera的Inspector面板,單擊Opean Vuforia Engine Configuration,接著將在Vuforia官網獲得的License Key黏貼到APP License Key一欄,就完成了基本的設置。
3 交互功能設計
該軟件最終要在安卓和IOS系統上面運行,需要捕捉手指在屏幕上的運行軌跡來實現相應的交互功能。新版本的Unity編輯器只能使用C#腳本語言,這里借助Microsoft Visual Studio來編寫C#腳本。放大、縮小手勢的識別和實現AR模型放大、縮小的C#腳本。
public class Enlarge : MonoBehaviour {
Vector2 oldPos1;
Vector2 oldPos2;
void Update()
{
if (Input .touchCount ==2)//檢測是否有2根手指觸摸屏幕
{
if (Input.GetTouch(0).phase == TouchPhase.Moved || Input.GetTouch(1).phase == TouchPhase.Moved)//檢測手指是否發生位移
{
Vector2 temPos1 = Input.GetTouch(0).position;
Vector2 temPos2 = Input.GetTouch(1).position;
if (IsEnlarge(oldPos1, oldPos2, temPos1, temPos2))
{
float oldScale = transform.localScale.x;
float newScale = oldScale * 1.025f;
transform.localScale = new Vector3(newScale, newScale, newScale);
//放大AR模型
}
else
{
float oldScale = transform.localScale.x;
float newScale = oldScale /1.025f;
transform.localScale = new Vector3(newScale, newScale, newScale);
//縮小AR模型
}
oldPos1 = temPos1;
oldPos2 = temPos2;
}
}
}
//判斷手勢的布爾函數
bool IsEnlarge(Vector2 op1,Vector2 op2,Vector2 np1,Vector2 np2)
{
float Length1 = Mathf.Sqrt((op1.x - op2.x) * (op1.x - op2.x) + (op1.y - op2.y) * (op1.y * op2.y));
float Length2 = Mathf.Sqrt((np1.x - np2.x) * (np1.x - np2.x) + (np1.y - np2.y) * (np1.y * np2.y));
if (Length1 > Length2)
{
return false;
} else
return true;
}
}
實現單指旋轉AR模型的C#腳本;
public class PlayerRotate : MonoBehaviour {
float xSpeed = 150.0f;
float ySpeed = 150.0f;
void Update () {
if (Input .GetMouseButton (0))
{
if (Input.touchCount ==1) ? ? ? ? ? ?{
if (Input .GetTouch (0).phase==TouchPhase .Moved)
{
transform.Rotate(Vector3.up * Input.GetAxis(“Mouse X”) * -xSpeed * Time.deltaTime, Space.World);
transform.Rotate(Vector3 .right ?* Input.GetAxis(“Mouse Y”) * -xSpeed * Time.deltaTime, Space.World);
}
}
}
}
}
將上述C#腳本掛載在AR模型上面經過編譯、運行測試,可實現相應的人機交互功能。
4 效果展示
完成相關功能設計后,在配置好Java環境的計算機上面可以將該工程打包發布到安卓平臺。利用安卓手機測試的效果如圖3所示。
5 結語
該文研究了AR技術在高中化學教育當中的應用,并且闡明了AR應用的開發流程。開發得到的AR教輔軟件展示效果較為真實,使用者可以通過這個軟件非常直觀的了解一些難以理解的化學知識點,就像該文中說到的同分異構體的理解。
現如今幾乎人手一部手機,而AR技術在移動端的應用依然具有很大的潛力,學生可以隨時隨地通過手機AR來學習,來探索美麗的科學世界。移動端的AR教輔應用的開發在教育方面仍具有重要的研究價值和意義。
參考文獻
[1]王喻晨.基于Unity3D的橋梁VR仿真設計[J].中國新技術新產品,2019(1):17-18.
[2]人民教育出版社課程教材研究所化學課程教材研究開發中心.化學[M].北京:人民教育出版社,2004:56-57.
[3]雷全智.基于Unity3D技術的三維課件開發與實現[J].南昌師范學院學報,2018(6):25-28.
[4]秦凡,朱澤,胡松花,等.基于Unity的虛擬校園漫游系統的實現[J].電子世界,2018(14):178-179.
[5]劉偉,鐘歡,雷傳飛,等.基于Unity3D的飛機引擎拆裝虛擬仿真[J].中國科技博覽,2019(6):238.