跳到主要內容區塊

計資中心電子報C&INC E-paper

技術論壇

在Visual C++開發OpenGL程式
  • 卷期:v0024
  • 出版日期:2013-03-20

作者:林淑芬 / 臺灣大學計算機及資訊網路中心教學研究組程式設計師


為提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;
}