1. 程式人生 > >VS2012 中完整配置OpenGL超級寶典(第五版)編譯環境

VS2012 中完整配置OpenGL超級寶典(第五版)編譯環境

在接觸OpenGL中,配置顯得相當麻煩,特別是在VS2012下配置時,存在許多問題,而網上的很多方法僅僅適用於VS2008,甚至僅適用於VC6.0,筆者經過自身的實踐,參考了許多網上的資料,總結了一下配置的方法,當然這僅僅是筆者的個人理解,筆者個人水平有限,因此未必是萬能的,如果解說存在錯誤或者不明白的地方,還望讀者原諒和更正,謝謝。

一、    先進行常用的GLUT相關的配置

GLUT 代表OpenGL UtilityTookit。Mark J.Kilgard 為了使OpenGL應用程式結構能夠真正獨立於視窗系統構思了GLUT庫。freeglut是一個GLUT的開源實現。

1、  到freeglut的官方網站

http://freeglut.sourceforge.net/上把最新版的Freeglut下載下來,解壓,然後根據讀者所安裝的VS版本,執行相應的專案。由於筆者用的是VS2012,所以,進入下面的目錄:

執行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.51.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的配置上如果有其他的新的注意事項,筆者也將繼續更新,希望讀者給予更正,筆者將虛心採納。