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