1. 程式人生 > >VS2010 + OpenGL 及 第一個例項

VS2010 + OpenGL 及 第一個例項

1.OpenGL開發環境簡介

基於OpenGL標準開發的應用程式執行時需有動態連結庫OpenGL32.DLL、Glu32.DLL,這兩個檔案在安裝Windows NT時已自動裝載到C:\WINDOWS\SYSTEM32目錄下(這裡假定使用者將Windows NT安裝在C盤上)。OpenGL的圖形庫函式封裝在動態連結庫OpenGL32.DLL中,開發基於OpenGL的應用程式,必須先了解OpenGL的庫函式。OpenGL函式命令方式十分有規律,每個庫函式均有字首gl、glu、aux,分別表示該函式屬於OpenGL基本庫、實用庫或輔助庫。Windows NT下的OpenGL包含了100多個核心函式,均以gl作為字首,同時還支援另外四類函式:
    •        OpenGL實用庫函式:43個,以glu作為字首;
    •        OpenGL輔助庫函式:31個,以aux作為字首;
    •        Windows專用庫函式(WGL):6個,以wgl作為字首;
    •        Win32API函式(WGL):5個,無字首。

2.安裝GLUT工具包

GLUT不是OpenGL所必須的,但它會給我們的學習帶來一定的方便,推薦安裝。
Windows環境下的GLUT下載地址:(大小約為150k)
http://www.opengl.org/resources/libraries/glut/glutdlls37beta.zip
 
GLUT代表OpenGL應用工具包,英文全稱為OpenGL Utility Toolkit,是一個和視窗系統無關的軟體包,
它由Mark Kilgard在SGI時寫的。作為AUX庫的功能更強大的替代品,用於隱藏不同視窗系統API的複雜性。

是一個學習OpenGL程式設計的一個良好開端。

3.VS環境配置

將下載的壓縮包解開,將得到5個檔案(glut.dll, glut32.dll, glut.lib, glut32.lib,glut.h)
(1)把glut.h複製到x:\Program Files\Microsoft\Visual Studio 10.0\VC\include\gl資料夾中,如果沒有gl這個資料夾則可以自己新建一個。(x是你安裝VS的碟符號)
(2)把解壓得到的glut.lib和glut32.lib放到靜態函式庫所在資料夾(即與include並排的lib資料夾下)。
(3)把解壓得到的glut.dll和glut32.dll放到作業系統目錄下面的system32資料夾內。(典型的位置為:C:\Windows\System32)
(注:如在開發應用程式時用到OpenGL輔助庫函式,則還需下載相應動態連結庫,包含glaux.dll, glaux.lib, glaux.h,相應步驟同上)

4.第一個OpenGL程式

首先建立工程,其步驟如下:
(1)建立一個Win32 Console Application。
(2)連結OpenGL libraries。在Visual C++中先右擊專案,選擇屬性,找到聯結器標籤,最後在輸入中的附加依賴庫加上opengl32.lib glut32.lib glu32.lib.
可以把下面的例子拷貝到工程中去,編譯執行。你可以看到一個三角形。
#include "stdafx.h"
#include<gl/glut.h>
#include<gl/glu.h>
#include<gl/gl.h>
 
void renderScene(void)
{
         glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
         glLoadIdentity();
         glBegin(GL_TRIANGLES);
         glVertex3f(-0.5,-0.5,0.0);
         glVertex3f(0.5,0.0,0.0);
         glVertex3f(0.0,0.5,0.0);
         glEnd();
         glutSwapBuffers();
}
 
int _tmain(int argc, _TCHAR* argv[])
{
         glutInit(&argc, (char**) argv);
         glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);
         glutInitWindowPosition(100,100);
         glutInitWindowSize(320,320);
         glutCreateWindow("Hello OpenGL");
         glutDisplayFunc(renderScene);
         glutMainLoop();//enters the GLUT event processing loop.
         return 0;
}
main函式中以glut開頭的函式都包含在glut.h中。GLUT庫的函式主要執行如處理多視窗繪製、處理回撥驅動事件、生成層疊式彈出選單、繪製點陣圖字型和筆畫字型,以及各種視窗管理等任務。
  •  glutInit用來初始化GLUT庫並同視窗系統對話協商。
  •  glutInitDisplayMode用來確定所建立視窗的顯示模式。引數GLUT_SINGLE 指定單快取視窗,這也是預設模式,對應的模式為GLUT_DOUBLE 雙快取視窗。引數GLUT_RGB指定顏色RGBA模式,這也是預設模式,對應的模式為GLUT_INDEX 顏色索引模式視窗。
  • glutInitWindowSize 初始化視窗的大小,第一個引數為視窗的寬度,第二個引數為視窗的高度,以畫素為單位。
  • glutInitWindowPosition 設定初始視窗的位置,第一個引數為視窗左上角x的座標,第二個引數為視窗左上角y的座標,以畫素為單位。螢幕的左上角的座標為(0,0),橫座標向右逐漸增加,縱座標向下逐漸增加。
  • glutCreateWindow 建立頂層視窗,視窗的名字為擴號中的引數。
  • glutDisplayFunc 註冊當前視窗的顯示回撥函式。當一個視窗的影象層需要重新繪製時,GLUT將呼叫該視窗的的顯示回撥函式。在此例中的mydisplay就是顯示回撥函式,顯示回撥函式不帶任何引數,它負責整個影象層的繪製。我們的大部分工作將集中在這個函式中。
  • glutMainLoop 進入GLUT事件處理迴圈。glutMainLoop函式在GLUT程式中最多隻能呼叫一次,它一旦被呼叫就不再返回,並且呼叫註冊過的回撥函式。所以這個函式必須放在註冊回撥函式的後面,此例中為glutDisplayFunc。

輸出結果: