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

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

  1. 把解壓得到的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
gl.jpg

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

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

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

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

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

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

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

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

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

  1. glClear,使用清除顏色。GL_COLOR_BUFFER_BIT表示清除顏色。glClear函數(shù)的其他作用暫不介紹
  2. glRectf,畫一個(gè)矩形。四個(gè)參數(shù)分別表示了位于對(duì)角線上(左下角和右上角)兩個(gè)點(diǎn)的橫、縱坐標(biāo)。
  3. glFlush,保證前面的OpenGL命令立即執(zhí)行(而不是讓它們?cè)诰彌_區(qū)中等待)。
    其作用跟fflush(stdout)類似
  4. glClearColor 設(shè)置背景清除顏色。四個(gè)參數(shù)前三個(gè)(0.0)是rgb值,代表黑色最后一個(gè)是設(shè)置透明度。

為了避免篇幅太長(zhǎng),筆者在此對(duì)openGL不多做介紹了。
其他參考資料

  1. 英文維基百科

  2. 其他博客

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容