VS2012 中完整配置OpenGL超級寶典(第五版)編譯環境
在接觸OpenGL中,配置顯得相當麻煩,特別是在VS2012下配置時,存在許多問題,而網上的很多方法僅僅適用於VS2008,甚至僅適用於VC6.0,筆者經過自身的實踐,參考了許多網上的資料,總結了一下配置的方法,當然這僅僅是筆者的個人理解,筆者個人水平有限,因此未必是萬能的,如果解說存在錯誤或者不明白的地方,還望讀者原諒和更正,謝謝。
一、 先進行常用的GLUT相關的配置
GLUT 代表OpenGL UtilityTookit。Mark J.Kilgard 為了使OpenGL應用程式結構能夠真正獨立於視窗系統構思了GLUT庫。freeglut是一個GLUT的開源實現。
1、 到freeglut的官方網站
執行freeglut.sln:
2、 選擇Release方式執行
3、 出現錯誤,直接無視
4、 到..\freeglut-2.8.1\lib\x86下多出了三個檔案
5、 到VS2012的安裝目錄下,筆者這裡是:
在VC\include下建一個資料夾,名為“GL”,如果有了的話就不用建了。
6、 收集下圖所示的所有相關檔案:
(1) h檔案
(2) lib檔案
(3) dll檔案
相關的壓縮包如下,讀者可以到網上搜索:
與gl、glu有關的檔案讀者上網搜,都可以搜的到。
與freeglut有關的h檔案、lib檔案、dll檔案可從第4步中下載和編譯的freeglut-2.8.1獲得,即:。
與GLUT有關的可從網上下載壓縮包:解壓後可以得到如下目錄內容:
與glew相關的可從網上下載壓縮包:(如果有最新的下載最新版本的),解壓後可以從其下的include目錄得到如下內容:
但是這個壓縮包的lib目錄下是沒有lib檔案的,要獲得這些lib,有兩種方法:
一是直接百度搜索相關名稱的lib檔案和dll檔案,然後下載;
二是從解壓後的資料夾中找到如下目錄內容:
然後像編譯freeglut那樣的方法獲得lib和dll,只不過這裡只能用VC6.0來編譯。
與glaux相關的檔案可以從網上下載壓縮包:,解壓後可以得到如下目錄的內容:
7、 所有的檔案準備好以後,接著就要將這些檔案存放到適當的地方,以使得VS2012能夠順利找到它們。
(1) h檔案——VS2012安裝目錄下,第5步中建立的名為“GL”的資料夾:
(2) lib檔案——VS2012安裝目錄\VC\lib下:
(3) dll檔案——C:\Windows\SysWOW64(如果是32位電腦,則放在System32中)
二、 所有這些檔案都已經好了以後,下面進入VS2012進行相關配置。
1、 建立Win32 控制檯應用程式——選擇空專案——新增cpp檔案。這裡都是正常的步驟。
下面的這些步驟在每一個OpenGL專案中最好都配置一次,儘管可能有些配置不需要也能夠正常執行,但是作為查錯方案,如果在下面的步驟有些沒做,程式無法執行時,這是可以考慮先進行下面的配置,如果問題仍然無法解決,再另想辦法。
2、 專案——專案屬性——配置屬性——連結器——輸入——附加依賴項,新增
glut32.lib;Opengl32.lib;Glu32.lib;glew32.lib等,總之需要哪個就新增哪個。
3、 專案——專案屬性——配置屬性——連結器——系統——子系統,選擇
視窗(/SUBSYSTEM:WINDOWS)
4、 專案——專案屬性——配置屬性——連結器——命令列——其它選項,新增
/ENTRY:mainCRTStartup
如果不這麼做,會出現下面的錯誤:
經過上面的配置以後,可以執行下面的程式了,這些程式中不需要用到GLTools。
#include<windows.h>
#include<GL/glu.h>
#include<GL/gl.h>
#include<GL/glut.h>
#include<GL/glaux.h>
voidbackground(void)
{
//設定背景顏色為黑色
glClearColor(0.0,0.0,0.0,0.0);
}
voidmyDisplay(void)
{
//buffer設定為顏色可寫
glClear(GL_COLOR_BUFFER_BIT);
//開始畫三角形
glBegin(GL_TRIANGLES);
//設定為光滑明暗模式
glShadeModel(GL_SMOOTH);
//設定第一個頂點為紅色
glColor3f(1.0,0.0,0.0);
//設定第一個頂點的座標為(-1.0,-1.0)
glVertex2f(-1.0,-1.0);
//設定第二個頂點為綠色
glColor3f(0.0,1.0,0.0);
//設定第二個頂點的座標為(0.0,-1.0)
glVertex2f(0.0,-1.0);
//設定第三個頂點為藍色
glColor3f(0.0,0.0,1.0);
//設定第三個頂點的座標為(-0.5,1.0)
glVertex2f(-0.5,1.0);
//三角形結束
glEnd();
//強制OpenGL函式在有限時間內執行
glFlush();
}
voidmyReshape(GLsizei w,GLsizei h)
{
glViewport(0,0,w,h);
//設定視口
glMatrixMode(GL_PROJECTION);
//指明當前矩陣為GL_PROJECTION
glLoadIdentity();
//將當前矩陣置換為單位陣
if(w<= h)
gluOrtho2D(-1.0,1.5,-1.5,1.5*(GLfloat)h/(GLfloat)w);
//定義二維正視投影矩陣
else
gluOrtho2D(-1.0,1.5*(GLfloat)w/(GLfloat)h,-1.5,1.5);
glMatrixMode(GL_MODELVIEW);
//指明當前矩陣為GL_MODELVIEW
}
intmain(int argc,char*argv[])
{
//初始化
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);
glutInitWindowSize(400,400);
glutInitWindowPosition(200,200);
//建立視窗
glutCreateWindow("Triangle");
//繪製與顯示
background();
glutReshapeFunc(myReshape);
glutDisplayFunc(myDisplay);
glutMainLoop();
return(0);
}
執行結果如下:
三、與GLTools有關的配置
然而,在《OpenGL超級寶典》第5版中,程式——第一個三角形,就用到了GLTools的相關東西,這時,要進行下面的配置。
1、 可從網上下載GLTools壓縮包:,解壓後得到的目錄如下:
也許你會發現,再深入目錄,會有一個資料夾與前面建立的資料夾“GL”同名:
注意,這裡千萬不要把這個資料夾刪了,因為GLTools需要GLEW來獲取OpenGL3.0或者更新版本的特性,所以不用管它,跟前面建立的“GL”資料夾是可以共存的。
2、 可以將(也可以不)整個解壓後的GLTools複製到VS2012的安裝路徑下,筆者這裡將其複製到如下所示的位置:
下面的這些步驟在每一個OpenGL專案中都需要配置一次。
3、 在開啟的VS2012工程專案中,做如下操作:
專案——專案屬性——配置屬性——VC++目錄——常規——附加包含目錄——將GLTools下的include目錄包含進來:
4、 在附加依賴項中將gltools.lib包含進來,如圖:
5、 設定忽略衝突:
工程右鍵 “屬性”->“配置屬性”->“C/C++”-> “程式碼生成” -> “ 執行庫” 選項設定成“多執行緒 (/MT)”,如圖:
如果不這樣處理,會出現如下錯誤或者警告:
這樣就可以執行要使用GLTools的程式了,如下(《OpenGL超級寶典》第五版程式——第一個三角形):
#include<GLTools.h>
#include<GLShaderManager.h>
#ifdef_APPLE_
#include<glut/glut.h>
#else
#defineFREEGLUT_STATIC
#include<GL/glut.h>
#endif
GLBatch triangleBatch;
GLShaderManager shaderManager;
voidChangeSize(intw,inth)
{
glViewport(0, 0,w,h);
}
voidSetupRC()
{
glClearColor(0.0f, 0.0f, 1.0f, 1.0f);
shaderManager.InitializeStockShaders();
GLfloatvVerts[] = { -0.5f, 0.0f, 0.0f,
0.5f, 0.0f, 0.0f,
0.0f, 0.5f, 0.0f };
triangleBatch.Begin(GL_TRIANGLES,3);
triangleBatch.CopyVertexData3f(vVerts);
triangleBatch.End();
}
voidRenderScene(void)
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT |GL_STENCIL_BUFFER_BIT);
GLfloatvRed[] = { 1.0f, 0.0f, 0.0f, 1.0f };
shaderManager.UseStockShader(GLT_SHADER_IDENTITY, vRed);
triangleBatch.Draw();
glutSwapBuffers();
}
intmain(intargc,char*argv[])
{
gltSetWorkingDirectory(argv[0]);
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGBA |GLUT_DEPTH|GLUT_STENCIL);
glutInitWindowSize(800,600);
glutCreateWindow("Triangle");
glutReshapeFunc(ChangeSize);
glutDisplayFunc(RenderScene);
GLenumerr = glewInit();
if(GLEW_OK != err)
{
fprintf(stderr,"GLEW Error: %s\n",glewGetErrorString(err));
return1;
}
SetupRC();
glutMainLoop();
return 0;
}
執行結果如下:
至此,已經配置好了基本的環境,這樣配置以後,與GL、GLU、GLUT、GLAUX、GLEW以及GLTools相關的所有標頭檔案、lib檔案在程式中就可以直接包含了,不會出現諸如“無法開啟xxx.h檔案”等這樣的錯誤了。
當然筆者這裡的配置方法也許並不能完全適應讀者的需求,因為筆者是在學習《OpenGL超級寶典》第5版前幾章時做的配置,可能到後期的學習,仍需要不斷更改配置,望讀者原諒和更正。
後期在OpenGL的配置上如果有其他的新的注意事項,筆者也將繼續更新,希望讀者給予更正,筆者將虛心採納。