openGL初學(xué)者(C++)
1. 配置openGL環(huán)境
第一步勤篮,選擇一個編譯環(huán)境
這里我選擇Visual Studio 2013作為學(xué)習(xí)OpenGL的環(huán)境都毒。
第二步,安裝GLUT工具包
首先碰缔,下載glut工具包:點擊下載glut庫账劲。解壓后,得到5個文件:glut.h金抡,glut.dll瀑焦,glut32.dll,glut.lib梗肝,glut32.lib榛瓮。
下面以VS2013為例,VS2010,VS2015與之類似巫击,VS2017有點不同禀晓。
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這個文件夾則新建一個坝锰。VS2013的默認(rèn)安裝路徑為 C:\Program Files\Microsoft\Visual Studio 13.0粹懒。
3. 把解壓得到的glut.lib和glut32.lib放到靜態(tài)函數(shù)庫所在文件夾(如果是VS2013,則是其安裝目錄下面的"VC\lib"文件夾)顷级。
第三步凫乖,寫第一個openGL程序
(1) 打開VS2013,新建一個Win32 Console Application(控制臺應(yīng)用程序),在向?qū)е械腁pplication Settings(應(yīng)用程序設(shè)置)拣凹,找到附加選項中的Empty project(空項目)森爽,并勾選上。
(2) 右鍵點擊源文件嚣镜,添加新建項后爬迟,選擇C++文件,即可開始我們的第一個openGL程序菊匿。
(3) 第一個簡單的openGL程序(可以直接復(fù)制到VS環(huán)境中運(yùn)行付呕,筆者建議自己動手打代碼)
#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("第一個OpenGL程序");
init();
glutDisplayFunc(&myDisplay);
glutMainLoop();
return 0;
}
該程序運(yùn)行后,在一個黑色的窗口會出現(xiàn)一個白色的矩形跌捆。運(yùn)行效果如下:2.openGL入門
1. 頭文件
程序需要包含頭文件glut.h徽职。
#include <GL/glut.h>
這是GLUT的頭文件。 本來OpenGL程序一般還要包含<GL/gl.h>和<GL/glu.h>佩厚,但glut.h的頭文件中已經(jīng)自動將這兩個文件包含了姆钉,不必再次包含。
2. main函數(shù)
int main(int argc, char *argv[])
{
//此處省去其他語句
return 0;
}
這個是帶命令行參數(shù)(必須寫出)的main函數(shù)抄瓦。
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
glutInitWindowPosition(100, 100);
glutInitWindowSize(400, 400);
glutCreateWindow("第一個OpenGL程序");
glutDisplayFunc(&myDisplay);
glutMainLoop();
以glut開頭的函數(shù)都是GLUT工具包所提供的函數(shù)潮瓶,下面常用的函數(shù)進(jìn)行介紹。
glutInit(&argc, argv)
對GLUT進(jìn)行初始化钙姊,這個函數(shù)必須在其它的GLUT使用之前調(diào)用一次毯辅。glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE)
設(shè)置顯示方式,其中:
GLUT_RGB表示使用RGB顏色煞额,與之對應(yīng)的還有GLUT_INDEX(表示使用索引顏色)思恐。
GLUT_SINGLE表示使用單緩沖,與之對應(yīng)的還有GLUT_DOUBLE(使用雙緩沖)膊毁。glutInitWindowPosition(100, 100)
設(shè)置窗口在筆記本電腦屏幕中的位置(100,100)胀莹。glutInitWindowSize(400, 400)
設(shè)置窗口的大小(400X400)。glutCreateWindow("第一個OpenGL程序")
根據(jù)前面設(shè)置的信息創(chuàng)建窗口媚媒。"第一個OpenGL程序"參數(shù)將被作為窗口的標(biāo)題嗜逻。
注意:窗口被創(chuàng)建后,并不立即顯示到屏幕上缭召。需要調(diào)用glutMainLoop才能看到窗口栈顷。glutDisplayFunc(&myDisplay)
設(shè)置回調(diào)函數(shù),當(dāng)需要進(jìn)行畫圖時嵌巷,myDisplay這個函數(shù)就會被調(diào)用萄凤。(筆者這個說法不夠準(zhǔn)確)。glutMainLoop
啟動程序執(zhí)行搪哪,進(jìn)行消息處理循環(huán)靡努。(這個函數(shù)可以顯示窗口,并且等待窗口關(guān)閉后才會返回)
3. 回調(diào)函數(shù)myDisplay和自定義初始函數(shù)init
通過 glutDisplayFunc(&myDisplay)
,我們設(shè)置了“當(dāng)需要畫圖時惑朦,請調(diào)用myDisplay函數(shù)”兽泄。
觀察myDisplay中的三個函數(shù),不難發(fā)現(xiàn)都以gl開頭(以gl開頭的函數(shù)都是OpenGL的標(biāo)準(zhǔn)函數(shù))
下面對用到的函數(shù)進(jìn)行介紹漾月。
- glClear病梢,使用清除顏色。GL_COLOR_BUFFER_BIT表示清除顏色梁肿。glClear函數(shù)的其他作用暫不介紹蜓陌。
- glRectf,畫一個矩形吩蔑。四個參數(shù)分別表示了位于對角線上(左下角和右上角)兩個點的橫钮热、縱坐標(biāo)。
- glFlush烛芬,保證前面的OpenGL命令立即執(zhí)行(而不是讓它們在緩沖區(qū)中等待)隧期。
其作用跟fflush(stdout)類似 - glClearColor 設(shè)置背景清除顏色。四個參數(shù)前三個(0.0)是rgb值蛀骇,代表黑色最后一個是設(shè)置透明度厌秒。
為了避免篇幅太長读拆,筆者在此對openGL不多做介紹了擅憔。
其他參考資料