GLUT,是指OpenGL Utility Toolkit,用于開發獨立于窗口系統的OpenGL程序,即該庫打包了很多的窗口操作,提供了獨立于具體操作系統的API,讓你快速的在OpenGL開發中完成窗口相關操作,如窗口顯示、輸入設備讀取、多級級聯菜單、多窗口管理等等便捷功能。
在windows中開發OpenGL,多基于VS環境,以VS 2015 社區版為例,介紹如何配置完整的GLUT開發環境。
GLUT相關二進制庫下載
除了官方GLUT,還有freeglut, 詳見:Sourceforge, GITHUB倉庫。
GLUT 3.7版本下載:下載連接
GLUT 下載列表頁面:下載列表,包含多種系統與版本,以及相關文檔
GLUT Windows庫內容
包含如下5個文件:
- glut.dll 動態鏈接庫
- glut.h 頭文件
- glut.lib 庫文件
- glut32.dll 動態鏈接庫
- glut32.lib 庫文件
兩個動態鏈接庫文件glut.dll, glut32.dll
需要放入到系統drive目錄內,
Windows 32位系統為:
C:\Windows\System32
Windows 64位系統為:
C:\Windows\SysWOW64
實際上,放在可執行文件同級目錄下,也是可以的,如,VS項目的Debug/
,64位項目為x64/Debug/
。為了方便起見,最好放置到系統drive目錄下,為了后期發布,則應當與項目放置在一起。
頭文件 glut.h
頭文件放置到系統頭文件放置的位置,這其中有多個選擇,目前VS安裝后,配置的相關開發平臺庫都具有OpenGL相關頭文件和庫,所以,只需要找到OpenGL的頭文件,放置到相同位置。OpenGL頭文件包括了:GL.h, GLU.h
。
具體的位置,結合VS項目,將很容易獲取到。
如:
C:\Program Files (x86)\Windows Kits\8.1\Include\um\gl
Lib庫文件 glut.lib, glut32.lib
Lib庫文件與頭文件放置位置差不多,只不過是放置到統一的Lib庫中。可以通過查看OpenGL的庫的位置,放置到相同位置。OpenGL庫文件包括了:GlU32.Lib, OpenGL32.Lib
。
如·:
C:\Program Files (x86)\Windows Kits\8.1\Lib\winv6.3\um\x64
通過VS提供的路徑進行配置
創建一個空的VS VC空項目:
打開項目屬性面板:
查看VC++目錄的相關內容:
配置包括了:Debug/Release的32位和64位平臺的相關內容,需要根據具體的路徑,和項目類型,進行放置頭文件、Lib文件的位置。
注意:dll文件,是根據本機系統類型,而非項目類型,因此,64位機就放入到C:\Windows\SysWOW64
,32位機就放到C:\Windows\System32
。
一個例程
#include<gl/glut.h>
#include<gl/glu.h>
#include<gl/gl.h>
void renderScene(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glBegin(GL_TRIANGLES);
glVertex3f(-0.5, -0.5, 0.0);
glVertex3f(0.5, 0.0, 0.0);
glVertex3f(0.0, 0.5, 0.0);
glEnd();
glutSwapBuffers();
}
int main(int argc, char* argv[])
{
glutInit(&argc, (char**)argv);
glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);
glutInitWindowPosition(100, 100);
glutInitWindowSize(320, 320);
glutCreateWindow("Hello OpenGL");
glutDisplayFunc(renderScene);
glutMainLoop();//enters the GLUT event processing loop.
return 0;
}
運行之后,看到黑色背景上,一個三角形,這是一個空間三角形:
OpenGL以點、線、三角形為基本元素類型,空間三角形是OpenGL中使用最多的基本類型。
為什么一定要這么配置
其實不一定要這么配置,尤其是GLUT,打開glut.h,可以看到這么一段:
#pragma comment (lib, "winmm.lib") /* link with Windows MultiMedia lib */
#pragma comment (lib, "opengl32.lib") /* link with Microsoft OpenGL lib */
#pragma comment (lib, "glu32.lib") /* link with OpenGL Utility lib */
#pragma comment (lib, "glut32.lib") /* link with Win32 GLUT lib */
這里,鏈接glut32.lib,并沒有指定具體的路徑位置,所以,鏈接器會在Include Lib目錄里找,因此需要放入到相應的Include目錄。修改這個為相對路徑或者絕對路徑后,則無需如此放置。