openGL初學(xué)者(C++)
1. 配置openGL環(huán)境
第一步,選擇一個(gè)編譯環(huán)境
這里我選擇Visual Studio 2013作為學(xué)習(xí)OpenGL的環(huán)境。
第二步,安裝GLUT工具包
首先,下載glut工具包:點(diǎn)擊下載glut庫(kù)。解壓后,得到5個(gè)文件:glut.h,glut.dll,glut32.dll,glut.lib,glut32.lib。
下面以VS2013為例,VS2010,VS2015與之類似,VS2017有點(diǎn)不同。
Windows環(huán)境下安裝GLUT的步驟:
1. 把解壓得到的glut.dll和glut32.dll放在C:\Windows\system32文件夾內(nèi)(32位系統(tǒng))或 C:\Windows\SysWOW64(64位系統(tǒng))。
- 把解壓得到的glut.h復(fù)制到Visual Studio 2013的安裝目錄(路徑)下的"\VC\include\gl"文件夾中,如果沒有g(shù)l這個(gè)文件夾則新建一個(gè)。VS2013的默認(rèn)安裝路徑為 C:\Program Files\Microsoft\Visual Studio 13.0。

3. 把解壓得到的glut.lib和glut32.lib放到靜態(tài)函數(shù)庫(kù)所在文件夾(如果是VS2013,則是其安裝目錄下面的"VC\lib"文件夾)。
第三步,寫第一個(gè)openGL程序
(1) 打開VS2013,新建一個(gè)Win32 Console Application(控制臺(tái)應(yīng)用程序),在向?qū)е械腁pplication Settings(應(yīng)用程序設(shè)置),找到附加選項(xiàng)中的Empty project(空項(xiàng)目),并勾選上。
(2) 右鍵點(diǎn)擊源文件,添加新建項(xiàng)后,選擇C++文件,即可開始我們的第一個(gè)openGL程序。
(3) 第一個(gè)簡(jiǎn)單的openGL程序(可以直接復(fù)制到VS環(huán)境中運(yùn)行,筆者建議自己動(dòng)手打代碼)
#include <GL/glut.h>
void init()
{
glClearColor(0.0, 0.0, 0.0, 0.0);
}
void myDisplay()
{
glClear(GL_COLOR_BUFFER_BIT);
glRectf(-0.5f, -0.5f, 0.5f, 0.5f);
glFlush();
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
glutInitWindowPosition(100, 100);
glutInitWindowSize(400, 400);
glutCreateWindow("第一個(gè)OpenGL程序");
init();
glutDisplayFunc(&myDisplay);
glutMainLoop();
return 0;
}
該程序運(yùn)行后,在一個(gè)黑色的窗口會(huì)出現(xiàn)一個(gè)白色的矩形。運(yùn)行效果如下:2.openGL入門
1. 頭文件
程序需要包含頭文件glut.h。
#include <GL/glut.h>
這是GLUT的頭文件。 本來OpenGL程序一般還要包含<GL/gl.h>和<GL/glu.h>,但glut.h的頭文件中已經(jīng)自動(dòng)將這兩個(gè)文件包含了,不必再次包含。
2. main函數(shù)
int main(int argc, char *argv[])
{
//此處省去其他語(yǔ)句
return 0;
}
這個(gè)是帶命令行參數(shù)(必須寫出)的main函數(shù)。
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
glutInitWindowPosition(100, 100);
glutInitWindowSize(400, 400);
glutCreateWindow("第一個(gè)OpenGL程序");
glutDisplayFunc(&myDisplay);
glutMainLoop();
以glut開頭的函數(shù)都是GLUT工具包所提供的函數(shù),下面常用的函數(shù)進(jìn)行介紹。
glutInit(&argc, argv)
對(duì)GLUT進(jìn)行初始化,這個(gè)函數(shù)必須在其它的GLUT使用之前調(diào)用一次。glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE)
設(shè)置顯示方式,其中:
GLUT_RGB表示使用RGB顏色,與之對(duì)應(yīng)的還有GLUT_INDEX(表示使用索引顏色)。
GLUT_SINGLE表示使用單緩沖,與之對(duì)應(yīng)的還有GLUT_DOUBLE(使用雙緩沖)。glutInitWindowPosition(100, 100)
設(shè)置窗口在筆記本電腦屏幕中的位置(100,100)。glutInitWindowSize(400, 400)
設(shè)置窗口的大小(400X400)。glutCreateWindow("第一個(gè)OpenGL程序")
根據(jù)前面設(shè)置的信息創(chuàng)建窗口。"第一個(gè)OpenGL程序"參數(shù)將被作為窗口的標(biāo)題。
注意:窗口被創(chuàng)建后,并不立即顯示到屏幕上。需要調(diào)用glutMainLoop才能看到窗口。glutDisplayFunc(&myDisplay)
設(shè)置回調(diào)函數(shù),當(dāng)需要進(jìn)行畫圖時(shí),myDisplay這個(gè)函數(shù)就會(huì)被調(diào)用。(筆者這個(gè)說法不夠準(zhǔn)確)。glutMainLoop
啟動(dòng)程序執(zhí)行,進(jìn)行消息處理循環(huán)。(這個(gè)函數(shù)可以顯示窗口,并且等待窗口關(guān)閉后才會(huì)返回)
3. 回調(diào)函數(shù)myDisplay和自定義初始函數(shù)init
通過 glutDisplayFunc(&myDisplay),我們?cè)O(shè)置了“當(dāng)需要畫圖時(shí),請(qǐng)調(diào)用myDisplay函數(shù)”。
觀察myDisplay中的三個(gè)函數(shù),不難發(fā)現(xiàn)都以gl開頭(以gl開頭的函數(shù)都是OpenGL的標(biāo)準(zhǔn)函數(shù))
下面對(duì)用到的函數(shù)進(jìn)行介紹。
- glClear,使用清除顏色。GL_COLOR_BUFFER_BIT表示清除顏色。glClear函數(shù)的其他作用暫不介紹。
- glRectf,畫一個(gè)矩形。四個(gè)參數(shù)分別表示了位于對(duì)角線上(左下角和右上角)兩個(gè)點(diǎn)的橫、縱坐標(biāo)。
- glFlush,保證前面的OpenGL命令立即執(zhí)行(而不是讓它們?cè)诰彌_區(qū)中等待)。
其作用跟fflush(stdout)類似 - glClearColor 設(shè)置背景清除顏色。四個(gè)參數(shù)前三個(gè)(0.0)是rgb值,代表黑色最后一個(gè)是設(shè)置透明度。
為了避免篇幅太長(zhǎng),筆者在此對(duì)openGL不多做介紹了。
其他參考資料