王少璞+何麗
摘要:傳統(tǒng)的歐拉角插值方案在解決三維物體的旋轉上應用范圍有限,且易生成錯誤路徑,而四元數樣條插值以其快捷、準確的特點正在受到越來越多的關注。本文以Unity3D作為開發(fā)平臺,研究了四元數的發(fā)展,設計了一套基于四元數樣條的坦克炮塔旋轉與瞄準方案,最終實現了在移動端通過觸摸屏操控坦克炮塔。實驗結果表明,四元數樣條插值較常規(guī)歐拉角插值而言描述準確、變化流暢,可以使三維物體的旋轉在視覺上更加平滑、真實。
關鍵詞:計算幾何;Unity3D;四元數樣條;三維旋轉;
中圖分類號:TP319 文獻標識碼:A 文章編號:1009-3044(2016)34-0237-02
Abstract: The traditional scheme that Euler Angle interpolation can cover limited situations when dealing with the rotation of three-dimensional objects. However, the Quaternion Spherical and Quadrangle interpolation are drawing attention for its quickness and accuracy. Base on a development platform named Unity3D, this paper studies the development of the quaternion, and designs a scheme about tanks turret rotating and targeting based on Quaternion, and finally achieved a project that can control tanks turret through the touch screen with a mobile terminal. The experimental result shows that the Quaternion Spherical and Quadrangle interpolation can make the rotation of three-dimensional objects looks more smoothly and real thanks to its satisfactory precise which the Euler Angle cannot match.
Key words: Computing geometry; Unity3D; Quaternion Splines; 3D rotation
1 概述
在三維圖形系統(tǒng)的開發(fā)過程中,描述模型的旋轉狀態(tài)成了計算機輔助幾何設計的一項重要研究領域。隨著相關需求愈發(fā)地旺盛,先后出現了歐拉角、矩陣、四元數等方式,三種方式各有利弊。歐拉角由于其易于理解的特性而被較早地使用,但由于容易導致路徑錯誤、自由度減少等缺陷而較少用于底層狀態(tài)控制。矩陣是目前計算機引擎底部使用較多的表達方法,但易導致矩陣蠕變,且使用不夠直觀,因此在許多軟件中都被隱藏在其他表達方式下[1]。四元數由于其易插值、增量旋轉速度快等特性而被廣泛使用,在許多軟件中均得到豐富的支持。
本次實驗通過目前較為流行的開發(fā)平臺Unity3D進行坦克炮塔的旋轉模擬操作,通過對比幾種方法的特性后使用四元數作為表達方式,并通過插值優(yōu)化了炮塔旋轉時視覺效果,使之更加流暢。
2 關鍵技術分析
2.1四元數
定義:四元數是一種三維空間中描述復數的表達方式,由四個元素,即一個實部和三個虛部組成,如下所示:
3 坦克炮塔旋轉及平滑處理實現
3.1旋轉
本次實驗使用Unity3D打包生成的Android平臺應用,其輸入方式為手指在觸摸屏的移動。手指的移動可以由一個二維數組(x,y)組成,其中x表示橫向移動距離,y表示縱向移動距離。應用到坦克炮塔時可以認為x表示炮塔的橫向旋轉幅度,y表示炮口的縱向旋轉幅度。雖然可以直接用于歐拉角體系,但其中產生的萬向節(jié)死鎖將導致生成錯誤的更長的路徑,從而導致在瞄準時浪費寶貴的時間,因此使用四元數來描述坦克炮塔,并利用乘法將多個維度的旋轉綜合為單個旋轉序列,降低操作復雜度。
3.2平滑處理
在使用常規(guī)歐拉角解決方案時,火炮會在瞄準較遠目標時產生劇烈的顫抖,因此需要較高的精確度以模擬炮口朝向在不同時刻的狀態(tài)。
實驗中炮塔的初狀態(tài)和末狀態(tài)分別為此時炮塔的方位和期望方位,炮塔從初狀態(tài)旋轉至末狀態(tài)往往需要一定的時間,所以需要在炮塔的旋轉過程中采用樣條插值。由于Unity3D已經提供了完善的四元數保存方案,所以數據在讀取和傳入時無需更改形式,通過FixedUpdate()函數調用機制[5],可以在每一定的時間間隔后進行一次采樣,計算整個樣條后插值改變炮塔方位。與歐拉角方案對比,可明顯看出采用Squad樣條的炮塔旋轉更加平滑,并且在瞄準較遠距離目標時不易發(fā)生顫抖現象,對坦克狀態(tài)的模擬更加真實。實驗效果如圖所示。
4 結論
本文主要研究了基于四元數的三維物體旋轉。借助Unity3D平臺較為完善的四元數支持,完成了使用觸摸屏指定任意目標的坦克炮塔旋轉控制,并通過插值算法使狀態(tài)之間的變化平滑流暢,通過四元數樣條生成一條類似曲線替代了普通線性插值,從而大大減少了瞄準遠處目標時帶來的顫抖現象。
四元數的諸多特性克服了傳統(tǒng)歐拉角表示下的一些無法避免的問題,但本身也存在著誤差累積、不易理解等缺陷。但是瑕不掩瑜,隨著時間的發(fā)展和相關知識體系的完善,四元數無疑會在三維圖形的表示和操作方面擴大使用范圍。
參考文獻:
[1] 吳彬,黃贊臻,郭雪峰,劉向群.Unity 4.X從入門到精通[M].中國鐵道出版社,2013.
[2] Millington,I.游戲物理引擎開發(fā)[M];徐明亮,李強,宋偉,譯.北京:清華大學出版社,2013.
[3] 劉俊峰,三維轉動的四元數表述[J].大學物理,2004,23(4):39-43.
[4] 關東東,關華勇,傅穎.一種3維動畫中間幀非線性插值算法[J].中國圖像圖形學報,2006, 11(12):1820-1826.
[5] 劉鋼,孫文濤.Unity官方案例精講[M].北京:中國鐵道出版社,2015.