分類: 程式設計

RGL:R 的 OpenGL 套件

RGL 是一套 R 的套件,它可以讓使用者在 R 的環境下畫出高品質的 OpenGL 3D 圖形,更可以讓使用者透過滑鼠旋轉或放大圖形,即時的看到圖形的每個角度,用起來不輸 Matlab,對於有 3D 資料分析需求的使用者來說,相當方便!只是對一般使用者而言,想要使用他必須先熟悉 R 的語法,R 是一個開放原始碼的統計軟體,跟 S-plus 非常相似,但沒學過的人恐怕還是要花上一小段時間。


RGL 除了可以畫出 3D 的圖形外,也可以將資料以動畫的方式呈現,其實就是連續畫出每張影格,看起來就會有動畫的效果,使用者也可以將這個動畫以 GIF 檔的方式儲存下來,使用一般瀏覽器就可以看了。

以下示範如何使用 RGL 做出 3D 圖動畫,首先當然必須要先把 R 與 RGL 套件裝好。R 的安裝很簡單,直接上 R 的網站下載自動安裝檔裝起來就可以了,目前最新版是 2.8.0 版,懶得找的話就直接下載這個吧。裝完了 R 之後,再進入 R 的環境安裝 RGL。選擇「程式套件」->「安裝程式套件」。

首先選擇一個最近的的鏡像站,在台灣的人當然選擇「Taiwan」的最快。

接下來選擇要安裝的套件,這裡你可以看到所有 R 官方所提供的套件,數量非常的多,他是按照字母順序排的,找到我們要的「rgl」,按下確定之後,RGL 就會自動安裝了。

裝完了 R 與 RGL 之後,另一個要安裝的工具是 ImageMagick,他是在產生 GIF 動畫檔時要用的工具,若是你只要在 R 的環境中看動畫,不儲存成 GIF 檔的話,是可以不用安裝它的。安裝 Imagemagick 也很方便,直接上他的網站下在自動安裝檔安裝即可,懶得找就下載這個吧。在安裝完 ImageMagick 之後,R 必須關閉重新啟動,不然 R 會找不到剛裝進去的 ImageMagick!

所有的工具都裝了之後,接下來進入 R 的環境中開始畫圖,在 R 的環境中所有的操作都是透過指令。首先載入 RGL 套件。

library(rgl)

從內建的資料中選一筆要作為示範用的資料,這裡我們選擇 volcano 這筆資料,若是你對這筆資料有興趣,可以使用 help(volcano) 指令查詢。

data(volcano)

產生我們實際畫圖用的座標資料,這裡的 z 是一個矩陣,也就是實際上我們要畫的資料,而 x 與 y 是一維陣列,指定 z 中資料格點的位置,無法理解的話,等到圖畫出來之後,看圖應該比較快。

<- 2 * volcano # Exaggerate the relief<- 10 * (1:nrow(z)) # 10 meter spacing (S to N)<- 10 * (1:ncol(z)) # 10 meter spacing (E to W)

產生出顏色的對應表,也就是決定每個點的顏色。

zlim <- range(y)
zlen <- zlim[2] - zlim[1] + 1
colorlut <- terrain.colors(zlen) # height color lookup table
col <- colorlut[ z-zlim[1]+1 ] # assign colors to heights

資料都準備好之後,就可以畫圖了。aspect=c(1.5,1,0.6) 是指定 x、y、z 軸的比例。

persp3d(x, y, z, color = col, aspect = c(1.5, 1, 0.6))

圖畫出來之後,剩下的就是讓他動起來。這裡的 axis=c(0,0,1) 是讓圖形以 z 座標軸為軸旋轉,rpm=6 是轉速,duration=10 是動畫的時間。

play3d(spin3d(axis = c(0, 0, 1), rpm = 6), duration = 10)

而要把動畫存成 GIF 檔,也是使用類似的方式。movie=”outputfile” 代表輸出的 GIF 檔案名稱,dir=”C:\\outputdir” 是輸出的資料夾,把它換成你要存圖的資料夾路徑,記得路徑中的反斜線都要多打一個,不然 R 會把反斜線當跳脫字元。

movie3d(spin3d(axis = c(0, 0, 1), rpm = 6), duration = 10, movie = "outputfile", dir = "C:\\outputdir")

在把動畫存成 GIF 檔的時候,記得要把 RGL 繪圖的視窗放在不會被其他視窗遮住的位置,也就你要看得到你畫的 3D 圖在螢幕上轉,不然轉出來的 GIF 檔也會是被遮住的圖形。

RGL 除了在 Windows 上可以使用之外,在其他平台上(例如 Linux、Mac OS)也可以使用,使用的方法與指令也都相同。這些是在 Ubuntu Linux 上用 RGL 畫出來的圖形。

G. T. Wang

個人使用 Linux 經驗長達十餘年,樂於分享各種自由軟體技術與實作文章。

Share
Published by
G. T. Wang

Recent Posts

光陽 KYMCO GP 125 機車接電發動、更換電瓶記錄

本篇記錄我的光陽 KYMCO ...

1 年 ago

[開箱] YubiKey 5C NFC 實體金鑰

本篇是 YubiKey 5C ...

2 年 ago

[DIY] 自製竹火把

本篇記錄我拿竹子加上過期的苦茶...

2 年 ago