黃紹龍
摘要:該文介紹了使用OpenGL進(jìn)行基本幾何變換和復(fù)合變換的方法,并通過定時器函數(shù)實現(xiàn)了模擬天體的公轉(zhuǎn)、自轉(zhuǎn)及脈沖縮放的動畫。
關(guān)鍵詞: 齊次坐標(biāo);幾何變換;復(fù)合變換;動畫
中圖分類號:TP317.4 文獻(xiàn)標(biāo)識碼:A 文章編號:1009-3044(2017)34-0261-02
Abstract: This article introduces the geometric transformation and composite transformation with the functions of OpenGL. It also designs an animation which emulates celestial bodys revolution, rotation and scale in pulse cycle with the help of the timer function.
Key words: Homogeneous coordinate; geometric transformation; composite transformation; animation
OpenGL(Open Graphics Library)定義了一個跨編程語言、跨平臺的專業(yè)圖形編程接口,是一個功能強(qiáng)大且調(diào)用方便的底層圖形庫。OpenGL圖形庫是計算機(jī)圖形學(xué)課程教學(xué)的有力工具。本文通過使用其中的幾何變換函數(shù)實現(xiàn)模擬天體運(yùn)動的仿真動畫。
1 預(yù)備知識
1.1 基本幾何變換及實現(xiàn)形式
平移、旋轉(zhuǎn)和縮放變換是幾何變換的三種基本形式。如果使用齊次坐標(biāo)表示,它們均可以寫成形如[P′=M?P]的形式,即幾何變換矩陣乘以坐標(biāo)列向量。
1.2 復(fù)合幾何變換
1.4 動畫原理
使用雙緩沖機(jī)制,固定的時間間隔對基本幾何變換函數(shù)的參數(shù)以確定的步長進(jìn)行修改,然后對幀緩存進(jìn)行刷新操作,用戶可以觀察到幾何體在窗口內(nèi)連續(xù)且平滑地變化。
2 動畫實例的實現(xiàn)
2.1 實現(xiàn)目標(biāo)
一個黑色正方形在白色背景下繞窗口中心順時針公轉(zhuǎn),同時繞自身的中心順時針自轉(zhuǎn),并且一個自轉(zhuǎn)周期內(nèi)大小由初始值漸變?yōu)槌跏贾档腫50%]。公轉(zhuǎn)周期是自轉(zhuǎn)周期的4倍。[1]
2.2 過程分析
要求實現(xiàn)的動畫包含公轉(zhuǎn)、自轉(zhuǎn)和脈沖縮放變化,較為復(fù)雜,可分步驟實現(xiàn)。
(1) 實現(xiàn)公轉(zhuǎn)
使用矩形命令繪制的正方形的中心和原點重合,先平移出半徑(設(shè)為180個像素),再繞窗口中心順時針旋轉(zhuǎn)(角度從[0°]到[-360°]變化,旋轉(zhuǎn)參數(shù)變化的步長值為-[1°]).設(shè)置定時器函數(shù)以100毫秒的間隔刷新幀緩存。
(2) 實現(xiàn)自轉(zhuǎn)
上述公轉(zhuǎn)過程中的正方形的朝向不停地變化。如圖1所示:
由圖形易知:
若正方形繞窗口中心順時針公轉(zhuǎn)[θ]時,則它繞自身中心順時針旋轉(zhuǎn)的角度也是[θ].
按以下過程確定自轉(zhuǎn)參數(shù)值:
①正方形繞窗口中心順時針公轉(zhuǎn)[θ]后,使正方形繞自身中心逆時針旋轉(zhuǎn)[θ],則它的朝向始終保持不變;
②由實現(xiàn)目標(biāo)可知,自轉(zhuǎn)速度是公轉(zhuǎn)速度的4倍,即公轉(zhuǎn)角度為[θ]時,對應(yīng)的自轉(zhuǎn)角度為[4θ].若為順時針自轉(zhuǎn),自轉(zhuǎn)參數(shù)為:[-θ+4θ=3θ];若為逆時針自轉(zhuǎn),自轉(zhuǎn)參數(shù)為:[-θ-4θ=-5θ]。
③正方形繞自身的中心旋轉(zhuǎn)可通過復(fù)合變換實現(xiàn):首先平移正方形使其中心與原點重合,然后繞原點順時針旋轉(zhuǎn)[3θ],最后反方向平移使正方形回到它應(yīng)處的位置。平移參數(shù)可由公轉(zhuǎn)半徑和公轉(zhuǎn)角度[θ]確定。
(3) 實現(xiàn)漸變的脈沖縮放
每一個公轉(zhuǎn)的[14]周期,正方形邊長由初始大小漸變?yōu)槌跏即笮〉囊话?,這種往復(fù)變化也稱為脈沖縮放變化。公轉(zhuǎn)角度的步長為-[1°],對應(yīng)了90個刷新周期,邊長值的變化量為50%,要實現(xiàn)大小的漸變,縮放因子變化的步長為[0.590]。
2.3 代碼實現(xiàn)
3 總結(jié)
幾何變換是計算機(jī)圖形學(xué)課程的重點,也是難點,難在應(yīng)用。本文的實例綜合運(yùn)用了平移、旋轉(zhuǎn)和縮放三種基本幾何變換以及它們的復(fù)合變換。通過設(shè)計、分析和實現(xiàn)較為復(fù)雜的動畫,可鍛煉學(xué)生的動手能力,提高學(xué)習(xí)興趣,深化知識的理解。
參考文獻(xiàn):
[1] Donald Hearn.Computer Graphics with OpenGL[M].北京:電子工業(yè)出版社,2012.2:256.
[2] 伏玉琛。計算機(jī)圖形學(xué)—原理方法與應(yīng)用[M].武漢:華中科技大學(xué)出版社,2003.2.endprint