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位系統)。
- 把解壓得到的glut.h復制到Visual Studio 2013的安裝目錄(路徑)下的"\VC\include\gl"文件夾中,如果沒有gl這個文件夾則新建一個。VS2013的默認安裝路徑為 C:\Program Files\Microsoft\Visual Studio 13.0。
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;
}
該程序運行后,在一個黑色的窗口會出現一個白色的矩形。運行效果如下: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工具包所提供的函數,下面常用的函數進行介紹。
glutInit(&argc, argv)
對GLUT進行初始化,這個函數必須在其它的GLUT使用之前調用一次。glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE)
設置顯示方式,其中:
GLUT_RGB表示使用RGB顏色,與之對應的還有GLUT_INDEX(表示使用索引顏色)。
GLUT_SINGLE表示使用單緩沖,與之對應的還有GLUT_DOUBLE(使用雙緩沖)。glutInitWindowPosition(100, 100)
設置窗口在筆記本電腦屏幕中的位置(100,100)。glutInitWindowSize(400, 400)
設置窗口的大小(400X400)。glutCreateWindow("第一個OpenGL程序")
根據前面設置的信息創建窗口。"第一個OpenGL程序"參數將被作為窗口的標題。
注意:窗口被創建后,并不立即顯示到屏幕上。需要調用glutMainLoop才能看到窗口。glutDisplayFunc(&myDisplay)
設置回調函數,當需要進行畫圖時,myDisplay這個函數就會被調用。(筆者這個說法不夠準確)。glutMainLoop
啟動程序執行,進行消息處理循環。(這個函數可以顯示窗口,并且等待窗口關閉后才會返回)
3. 回調函數myDisplay和自定義初始函數init
通過 glutDisplayFunc(&myDisplay)
,我們設置了“當需要畫圖時,請調用myDisplay函數”。
觀察myDisplay中的三個函數,不難發現都以gl開頭(以gl開頭的函數都是OpenGL的標準函數)
下面對用到的函數進行介紹。
- glClear,使用清除顏色。GL_COLOR_BUFFER_BIT表示清除顏色。glClear函數的其他作用暫不介紹。
- glRectf,畫一個矩形。四個參數分別表示了位于對角線上(左下角和右上角)兩個點的橫、縱坐標。
- glFlush,保證前面的OpenGL命令立即執行(而不是讓它們在緩沖區中等待)。
其作用跟fflush(stdout)類似 - glClearColor 設置背景清除顏色。四個參數前三個(0.0)是rgb值,代表黑色最后一個是設置透明度。
為了避免篇幅太長,筆者在此對openGL不多做介紹了。
其他參考資料