初學(xué)openGL(C++)

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))。

  1. 把解壓得到的glut.h復(fù)制到Visual Studio 2013的安裝目錄(路徑)下的"\VC\include\gl"文件夾中,如果沒有g(shù)l這個文件夾則新建一個坝锰。VS2013的默認(rèn)安裝路徑為 C:\Program Files\Microsoft\Visual Studio 13.0粹懒。
gl.jpg

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)行效果如下:
openGL.JPG

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)行介紹。

  1. glutInit(&argc, argv)
    對GLUT進(jìn)行初始化钙姊,這個函數(shù)必須在其它的GLUT使用之前調(diào)用一次毯辅。

  2. glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE)
    設(shè)置顯示方式,其中:
    GLUT_RGB表示使用RGB顏色煞额,與之對應(yīng)的還有GLUT_INDEX(表示使用索引顏色)思恐。
    GLUT_SINGLE表示使用單緩沖,與之對應(yīng)的還有GLUT_DOUBLE(使用雙緩沖)膊毁。

  3. glutInitWindowPosition(100, 100)
    設(shè)置窗口在筆記本電腦屏幕中的位置(100,100)胀莹。

  4. glutInitWindowSize(400, 400)
    設(shè)置窗口的大小(400X400)。

  5. glutCreateWindow("第一個OpenGL程序")
    根據(jù)前面設(shè)置的信息創(chuàng)建窗口媚媒。"第一個OpenGL程序"參數(shù)將被作為窗口的標(biāo)題嗜逻。
    注意:窗口被創(chuàng)建后,并不立即顯示到屏幕上缭召。需要調(diào)用glutMainLoop才能看到窗口栈顷。

  6. glutDisplayFunc(&myDisplay)
    設(shè)置回調(diào)函數(shù),當(dāng)需要進(jìn)行畫圖時嵌巷,myDisplay這個函數(shù)就會被調(diào)用萄凤。(筆者這個說法不夠準(zhǔn)確)。

  7. 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)行介紹漾月。

  1. glClear病梢,使用清除顏色。GL_COLOR_BUFFER_BIT表示清除顏色梁肿。glClear函數(shù)的其他作用暫不介紹蜓陌。
  2. glRectf,畫一個矩形吩蔑。四個參數(shù)分別表示了位于對角線上(左下角和右上角)兩個點的橫钮热、縱坐標(biāo)。
  3. glFlush烛芬,保證前面的OpenGL命令立即執(zhí)行(而不是讓它們在緩沖區(qū)中等待)隧期。
    其作用跟fflush(stdout)類似
  4. glClearColor 設(shè)置背景清除顏色。四個參數(shù)前三個(0.0)是rgb值蛀骇,代表黑色最后一個是設(shè)置透明度厌秒。

為了避免篇幅太長读拆,筆者在此對openGL不多做介紹了擅憔。
其他參考資料

  1. 英文維基百科

  2. 其他博客

    版權(quán)聲明:本文為原創(chuàng)文章,轉(zhuǎn)載時請注明原文地址檐晕。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末暑诸,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子辟灰,更是在濱河造成了極大的恐慌个榕,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,651評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件芥喇,死亡現(xiàn)場離奇詭異西采,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)继控,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評論 3 392
  • 文/潘曉璐 我一進(jìn)店門械馆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人武通,你說我怎么就攤上這事霹崎。” “怎么了冶忱?”我有些...
    開封第一講書人閱讀 162,931評論 0 353
  • 文/不壞的土叔 我叫張陵尾菇,是天一觀的道長。 經(jīng)常有香客問我,道長派诬,這世上最難降的妖魔是什么劳淆? 我笑而不...
    開封第一講書人閱讀 58,218評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮默赂,結(jié)果婚禮上憔儿,老公的妹妹穿的比我還像新娘。我一直安慰自己放可,他們只是感情好谒臼,可當(dāng)我...
    茶點故事閱讀 67,234評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著耀里,像睡著了一般蜈缤。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上冯挎,一...
    開封第一講書人閱讀 51,198評論 1 299
  • 那天底哥,我揣著相機(jī)與錄音,去河邊找鬼房官。 笑死趾徽,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的翰守。 我是一名探鬼主播孵奶,決...
    沈念sama閱讀 40,084評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼蜡峰!你這毒婦竟也來了了袁?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,926評論 0 274
  • 序言:老撾萬榮一對情侶失蹤湿颅,失蹤者是張志新(化名)和其女友劉穎载绿,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體油航,經(jīng)...
    沈念sama閱讀 45,341評論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡崭庸,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,563評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了谊囚。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片怕享。...
    茶點故事閱讀 39,731評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖秒啦,靈堂內(nèi)的尸體忽然破棺而出熬粗,到底是詐尸還是另有隱情,我是刑警寧澤余境,帶...
    沈念sama閱讀 35,430評論 5 343
  • 正文 年R本政府宣布驻呐,位于F島的核電站灌诅,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏含末。R本人自食惡果不足惜猜拾,卻給世界環(huán)境...
    茶點故事閱讀 41,036評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望佣盒。 院中可真熱鬧挎袜,春花似錦、人聲如沸肥惭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,676評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蜜葱。三九已至全景,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間牵囤,已是汗流浹背爸黄。 一陣腳步聲響...
    開封第一講書人閱讀 32,829評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留揭鳞,地道東北人炕贵。 一個月前我還...
    沈念sama閱讀 47,743評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像野崇,于是被迫代替她去往敵國和親称开。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,629評論 2 354

推薦閱讀更多精彩內(nèi)容