-- 簡介 --
OpenGL是通過數學等理論知識定義3D或2D模型,由計算機通過流水線渲染技術進行渲染,產生逼真的場景圖像,電影和游戲中的特效都有用到。每每看到精美的畫面,真想自己也能做出如此作品。先好好學習吧!
想要學習是好事,關鍵是要堅持,方法得當。之前在導師的提議下,買了《交互式計算機圖形學》,粗略過了一遍,其中有提到glut這個圖形庫,這是個開發中小型圖形應用的跨平台圖形庫,對於入門學習圖形學是很適合的。可以查看百度百科介紹 。
glut下載鏈接:https://www.opengl.org/resources/libraries/glut/ 【頁面中點擊Pre-compiled Win32 for Intel GLUT 3.7 DLLs for Windows 95 & NT 下載】
-- 環境配置 --
實驗中下載window預編譯文件,默認文件名為:glutdlls37beta.zip,解壓到G:\glut\lib,可根據自己需要解壓到其他位置。
總共包含5個文件:glut.dll、glut32.dll、glut.lib、glut32.lib、glut.h
為了方便,將兩個動態鏈接庫都拷貝到C:\Windows\System32 和C:\Windows\SysWOW64
啟用visual studio 2017,新建一個空項目,在屬性管理器中選擇Debug|Win32,右鍵屬性,選擇VC++ 目錄, 點擊右邊的包含目錄並編輯路徑為G:\glut\lib,庫目錄同樣操作
接着,左手邊點擊鏈接器,展開選擇輸入,在附加依賴項中編輯glut32.lib和glut.lib
vs中配置方法都類似,在學習OpenCV時配置情況類似。
-- 代碼測試 --
新建一個源文件main.cpp
輸入以下代碼:
1 #include <glut.h>
2
3 void display(void) { 4 glClear(GL_COLOR_BUFFER_BIT); 5 glRectf(-0.5f, -0.5f, 0.5f, 0.5f); 6 glFlush(); 7 } 8
9 int main(int argc, char *argv[]) { 10 glutInit(&argc, argv); 11 glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE); 12 glutInitWindowPosition(300, 300); 13 glutInitWindowSize(300, 300); 14 glutCreateWindow("第一個OpenGL程序"); 15 glutDisplayFunc(&display); 16 glutMainLoop(); 17 return 0; 18 }
運行后結果如下:
默認情況下,結果中包含一個命令行窗口和OPenGL的結果窗口。
-- 畫點、畫線、畫矩形 --
在上面測試代碼中,將display函數修改如下,即可畫出幾個點幾條邊和一個矩形。
畫點畫邊包含在glBegin()和glEnd()之間,點的話就簡單指定位置及大小顏色等,邊的話類似,只是每條邊要以兩個點確定,故在畫線實驗代碼中點成對出現
1 void display(void) { 2 glClear(GL_COLOR_BUFFER_BIT); 3 glColor3f(0.0f, 0.3f, 1.0f); 4 glRectf(-0.5f, -0.5f, 0.5f, 0.5f); // 畫矩形 5 glPointSize(5.0f); 6 glColor3f(1.0f, 0.0f, 0.0f); 7 8 // 打點 9 glBegin(GL_POINTS); 10 glVertex2f(0.0f, 0.0f); 11 glVertex2f(-0.5f, -0.5f); 12 glVertex2f(0.5f, -0.5f); 13 glVertex2f(-0.5f, 0.5f); 14 glVertex2f(0.5f, 0.5f); 15 glEnd(); 16 17 // 畫線 18 glLineWidth(2.0f); 19 glColor3f(0.0f, 1.0f, 1.0f); 20 glBegin(GL_LINES); 21 glVertex2f(1.0f, 0.0f); 22 glVertex2f(0.0f, 1.0f); 23 glVertex2f(0.0f, 1.0f); 24 glVertex2f(-1.0f, 0.0f); 25 glVertex2f(-1.0f, 0.0f); 26 glVertex2f(0.0f, -1.0f); 27 glVertex2f(0.0f, -1.0f); 28 glVertex2f(1.0f, 0.0f); 29 glEnd(); 30 31 glFlush(); 32 }
修改后,運行結果如下: