初學openGL(C++)

weixin_34054866發表於2017-12-10

openGL初學者(C++)

1. 配置openGL環境

第一步,選擇一個編譯環境

這裡我選擇Visual Studio 2013作為學習OpenGL的環境。

第二步,安裝GLUT工具包

首先,下載glut工具包:點選下載glut庫。解壓後,得到5個檔案:glut.h,glut.dll,glut32.dll,glut.lib,glut32.lib。

下面以VS2013為例,VS2010,VS2015與之類似,VS2017有點不同。

Windows環境下安裝GLUT的步驟:

1. 把解壓得到的glut.dll和glut32.dll放在C:\Windows\system32資料夾內(32位系統)或 C:\Windows\SysWOW64(64位系統)。

  1. 把解壓得到的glut.h複製到Visual Studio 2013的安裝目錄(路徑)下的"\VC\include\gl"資料夾中,如果沒有gl這個資料夾則新建一個。VS2013的預設安裝路徑為 C:\Program Files\Microsoft\Visual Studio 13.0
8019646-3676b83561fbfae4.jpg
gl.jpg

3. 把解壓得到的glut.lib和glut32.lib放到靜態函式庫所在資料夾(如果是VS2013,則是其安裝目錄下面的"VC\lib"資料夾)。

第三步,寫第一個openGL程式

(1) 開啟VS2013,新建一個Win32 Console Application(控制檯應用程式),在嚮導中的Application Settings(應用程式設定),找到附加選項中的Empty project(空專案),並勾選上。
(2) 右鍵點選原始檔,新增新建項後,選擇C++檔案,即可開始我們的第一個openGL程式。
(3) 第一個簡單的openGL程式(可以直接複製到VS環境中執行,筆者建議自己動手打程式碼)

#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;
}

該程式執行後,在一個黑色的視窗會出現一個白色的矩形。執行效果如下:
8019646-c2a72db2905aa880.JPG
openGL.JPG

2.openGL入門

1. 標頭檔案

程式需要包含標頭檔案glut.h。

#include <GL/glut.h>

這是GLUT的標頭檔案。 本來OpenGL程式一般還要包含<GL/gl.h>和<GL/glu.h>,但glut.h的標頭檔案中已經自動將這兩個檔案包含了,不必再次包含。

2. main函式

int main(int argc, char *argv[])
{
  //此處省去其他語句
  return 0;
}

這個是帶命令列引數(必須寫出)的main函式。

    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE); 
    glutInitWindowPosition(100, 100); 
    glutInitWindowSize(400, 400); 
    glutCreateWindow("第一個OpenGL程式"); 
    glutDisplayFunc(&myDisplay);
    glutMainLoop(); 

以glut開頭的函式都是GLUT工具包所提供的函式,下面常用的函式進行介紹。

  1. glutInit(&argc, argv)
    對GLUT進行初始化,這個函式必須在其它的GLUT使用之前呼叫一次。

  2. glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE)
    設定顯示方式,其中:
    GLUT_RGB表示使用RGB顏色,與之對應的還有GLUT_INDEX(表示使用索引顏色)。
    GLUT_SINGLE表示使用單緩衝,與之對應的還有GLUT_DOUBLE(使用雙緩衝)。

  3. glutInitWindowPosition(100, 100)
    設定視窗在膝上型電腦螢幕中的位置(100,100)。

  4. glutInitWindowSize(400, 400)
    設定視窗的大小(400X400)。

  5. glutCreateWindow("第一個OpenGL程式")
    根據前面設定的資訊建立視窗。"第一個OpenGL程式"引數將被作為視窗的標題。
    注意:視窗被建立後,並不立即顯示到螢幕上。需要呼叫glutMainLoop才能看到視窗。

  6. glutDisplayFunc(&myDisplay)
    設定回撥函式,當需要進行畫圖時,myDisplay這個函式就會被呼叫。(筆者這個說法不夠準確)。

  7. glutMainLoop
    啟動程式執行,進行訊息處理迴圈。(這個函式可以顯示視窗,並且等待視窗關閉後才會返回)

3. 回撥函式myDisplay和自定義初始函式init

通過 glutDisplayFunc(&myDisplay),我們設定了“當需要畫圖時,請呼叫myDisplay函式”。
觀察myDisplay中的三個函式,不難發現都以gl開頭(以gl開頭的函式都是OpenGL的標準函式)
下面對用到的函式進行介紹。

  1. glClear,使用清除顏色。GL_COLOR_BUFFER_BIT表示清除顏色。glClear函式的其他作用暫不介紹
  2. glRectf,畫一個矩形。四個引數分別表示了位於對角線上(左下角和右上角)兩個點的橫、縱座標。
  3. glFlush,保證前面的OpenGL命令立即執行(而不是讓它們在緩衝區中等待)。
    其作用跟fflush(stdout)類似
  4. glClearColor 設定背景清除顏色。四個引數前三個(0.0)是rgb值,代表黑色最後一個是設定透明度。

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

  1. 英文維基百科

  2. 其他部落格

    版權宣告:本文為原創文章,轉載時請註明原文地址。

相關文章