VS2010 + OpenGL 及 第一個例項
阿新 • • 發佈:2019-02-07
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。
輸出結果: