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