作者:林淑芬 / 臺灣大學計算機及資訊網路中心教學研究組程式設計師
為提OpenGL是非常普遍的2D和3D繪圖程式平台,提供各種圖像函式庫讓開發者使用,支援多種程式語言,包含C#、Java、Python、Perl...等等,是一個具彈性且跨平台的開發工具。這裡我們將以Visual Studio 2008為例,簡易說明如何下載、安裝OpenGL、建立新專案、編輯C++程式,以及如何連結到正確的資料庫和標題檔,編譯與執行OpenGL的指令。
OpenGL(Open Graphics Library)是使用非常普遍的2D和3D繪圖程式平台,大多數的作業系統和編譯程式都包含OpenGL的開發與執行環境。Microsoft的Visual Studio當然也提供了OpenGL程式的整合開發環境(IDE, Integrated Development Environment),但是在安裝Visual Studio 2008/2010後,還必須作好一些安裝設定步驟,建立新專案,連結資料庫,才能順利使用OpenGL的指令。
這裡我們將以Visual Studio 2008為例,簡易說明如何下載、安裝OpenGL、建立新專案、編輯C++程式,以及如何連結到正確的資料庫和標題檔,編譯與執行OpenGL的指令。
一. OpenGL的環境設置
OpenGL的環境設置需要四個檔案glut32.dll、glut.h、glut32.lib、opengl32.lib,可自行連線到http://www.opengl.org/resources/libraries/glut/glutdlls37beta.zip下載,將glut32.dll放到C:\WINDOWS\system32目錄下,將glut32.lib和opengl32.lib放到C:\Program Files\Microsoft Visual Studio 9.0\VC\Lib目錄下,將glut.h放到C:\Program Files\Microsoft Visual Studio 9.0\VC\ Include\GL\目錄下,這樣就完成了OpenGL環境的設置。
二. 建立C++專案和程式
在Visual Studio 2008下執行功能表的『檔案/新增專案』:
選擇「Win32主控台應用程式」,輸入專案名稱按確定,開啟「Win32應用程式精靈」對話方塊如下:
按「下一步」,然後選擇「空專案」。
按「完成」鈕,即完成建立新專案。接著在「原始程式檔」按右鍵,選「新增項目」。
在「加入新項目」對話方塊中選擇「C++檔」,並輸入程式檔名稱為firstGL.cpp。
這時就可以在下列的視窗內先行輸入OpenGL程式,或繼續依照下列步驟連結到OpenGL資料庫。
三. 連結到OpenGL資料庫
執行功能表的『專案/屬性』命令,打開本專案的屬性頁。
選擇「組態屬性/連結器/輸入」屬性如下圖,並選擇「組態」下拉清單中的「所有組態」。
按下「其他相依性」右邊的鈕。
在「其他相依性」對話方塊中輸入opengl32.lib glut32.lib
按「確定」後即可完成OpenGL的環境設定。
四. 編輯、編譯及執行程式
以下視窗內是輸入完成的OpenGL程式(詳細程式碼附於最後),要注意C++程式的開頭都需要放置一行#include <GL/glut.h>連結到正確的標題檔。
程式完成後可選擇「偵錯/開始偵錯」或按鍵盤的F5編譯執行程式。
執行結果如下圖,視窗中顯示一個彩色三角形。若要結束程式則按視窗右上角的關閉按鈕。
上圖的彩色三角形範例程式firstGL.cpp如下:
#include <GL/glut.h>
void Display(void)
{
glPushMatrix();
glBegin (GL_TRIANGLES); // 開始劃三角形
glColor3f (1.0f, 0.0f, 0.0f); // 設定輸出色為紅色
glVertex2f (0.0f, 1.0f); //(x1,y1)=(0, 1)
glColor3f (0.0f, 1.0f, 0.0f); // 設定輸出色為綠色
glVertex2f (0.87f, -0.5f); //(x2,y2)=(0.87,-0.5)
glColor3f (0.0f, 0.0f, 1.0f); // 設定輸出色為藍色
glVertex2f (-0.87f, -0.5f); //(x3,y3)=(-0.87,-0.5)
glEnd (); // 結束劃三角形
glPopMatrix();
glutSwapBuffers();
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE);
glutInitWindowPosition(100, 100); // 設定視窗位置
glutInitWindowSize(400, 400); // 設定視窗大小
glutCreateWindow("Colorful Triangle "); // 設定視窗標題
glutDisplayFunc(Display); // 呼叫函數
glutMainLoop();
return 0;
}