標籤:
在Windows下使用微軟的Visual Studio來開發應用的程式員很普遍。而在Visual Studio下配置Freeglut,多數都是通過在網上直接下載已經為特定版本的Visual Studio編譯好的二進位檔案來進行。然而Visual Studio的版本已有很多,因此這些直接下載的檔案不一定適合我們自己使用的Visual Studio。Freeglut作為一個跨越平台的OpenGL開發工具,已經充分地考慮到各種平台下的配置安裝需求,但它並沒有直接提供可拿來就用的二進位形式,相反,只是提供了原始碼,程式員依據各自的平台進行相應的編譯後,就可得到適合自己的版本了。但此過程相對比較繁瑣,從而造成眾多程式員不知從何下手。
本文詳細介紹了如何為免費的Visual Studio Community 2013編譯並配置freeglut,最後開發並運行一個最簡單的OpenGL應用。
下載並安裝免費的Visual Studio Community 2013
到這裡下載vs_ommunity.exe。最好用IE來開啟上述地址,別的瀏覽器可能可以訪問網頁,但點不開。這是一個大小僅為1.18M的線上安裝程式。也可以訪問此頁面來選擇下載大小為6.89G的DVD9 ISO映像檔案。這兩種形式的檔案,我都試過了,ISO映像檔案可以裝在32位的Win7上面,但在64位的Win7上,好像裝不了,如果遇到這個問題,可選擇線上安裝程式。
下載並安裝…… 這可是一個漫長的過程,尤其是線上安裝。我上班前開始線上安裝,下班後,哈,自動安裝完畢了。
如果需要,也可以安裝簡體中文語言套件。
下載Freeglut
到Freeglut官網上下載Freeglut,並將其解壓到一個檔案夾下面,如C:\freeglut。其目錄下有兩個重要檔案夾,一是include,包含了C的標頭檔,另一是src,存有我們將要編譯的原始碼。
編譯Freeglut
到cmake.org上下載一個可直接在Windows上安裝的CMake,並雙擊此檔案以安裝。
安裝好後,運行CMake,依照進行設定。
Where is the source code用以指定我們所解壓的Freeglut的目錄,此目錄下有一個src的子目錄。Where to build the binaries用於指定Freeglut編譯後的存放結果的目錄。這裡,我在一個temp的目錄下建了一個freeglut_32的子目錄,這是因為我想在我的64位作業系統編譯一個32位的Freeglut。原因下面再作進一步的解釋 。
點擊Configure按鈕。將彈出一個如所示的視窗。
在Specify the generator for this project的下拉框中選Visual Studio 12 2013。我們在上面所下載的Visual Studio Community 2013,其版本號碼為12,發布時間應為2013。下拉框中還有一個比較接近的Visual Studio 12 2013 Win64的選項,可編譯為64位的Freeglut。如前所述,我這裡想要一個32位而不是64位的,故不選此選項。
點擊Finish按鈕。CMake將依據選擇進行第一遍的編譯。然後,如所示,暫時停止編譯,以讓我們作進一步選擇。
其中FREEGLUT_GLES是為嵌入系統而編譯,不是我們擬開發的案頭應用所需,故不選。其中均選。
然後,再次點擊Configure,紅色背景消失,表示可進行下一步的編譯了。再點擊Generate按鈕,CMake瞬時顯示Generating done,表示編譯完成。此時可關閉CMake應用。
此時,在C:\UserData\Sarkuya\temp\freeglut_32下面,將產生許多檔案,其中有一個是freeglut.sln檔案,這是Visual Studio的Solution檔案。雙擊此檔案,Visual Studio運行並載入此方案。此方案下共有27個項目。在Visual Studio中按F7鍵,編譯整個方案。
編譯方案後,不僅產生了我們所需的檔案,還帶有一些可以直接啟動並執行OpenGL應用。
我們可以在Visual Studio中選中特定的項目,如smooth_opengl3項目,按右鍵,選Set as StartUp Project,將其設為啟動項目後,按F5鍵,運行該項目,就可出現一個迷人的多彩三角形。
這個三角形同時也告訴我們,Freeglut已經編譯完畢,整裝待發了。關閉smooth_opengl3應用,同時也Visual Studio。看完別人演的電影,我們也要開始自編自導了。
製作32位的Freeglut發行包
建立一個名為freeglut-3.0.0-msvc-compiled的檔案夾,此檔案夾將成為發行包的根目錄。下面我們手工製作這個發行包。
我們在上面下載並解壓的C:\UserData\Sarkuya\Tools\Programming\FreeGlut\freeglut-3.0.0檔案夾下,將子檔案夾include複製到freeglut-3.0.0-msvc-compiled的檔案夾中。
在freeglut-3.0.0-msvc-compiled檔案夾下建立一個lib子檔案夾,
將C:\UserData\Sarkuya\temp\freeglut_32\lib\Debug檔案夾下的所有三個檔案: freeglut_staticd.lib, freeglutd.exp及freeglutd.lib,全部複製到建立的lib子檔案夾中。
在freeglut-3.0.0-msvc-compiled檔案夾下建立一個bin子檔案夾,在C:\UserData\Sarkuya\temp\freeglut_32\bin\Debug檔案夾,找到freeglutd.dll檔案,將其複製到建立的bin子檔案夾中。
此時,freeglut-3.0.0-msvc-compiled的檔案夾的結構如下:
freeglut-3.0.0-msvc-compiled --> bin --> freeglutd.dll --> include --> GL --> freeglut.h --> freeglut_ext.h --> freeglut_std.h --> glut.h --> lib --> freeglut_staticd.lib --> freeglutd.exp --> freeglutd.lib
我們的32位發行包製作完畢。如果有需要,可將其打包為一個壓縮檔,並放在網路上供他人下載使用。
將Freeglut發行包配置到Visual Studio環境
Visual Studio的C/C++應用的標頭檔目錄是C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include。將發行包GL目錄下的四個標頭檔複製到其下面的GL子目錄中(如果VC的include目錄下還沒有GL子目錄,則需手工建立)。
Visual Studio的C/C++應用的庫檔案目錄是C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\lib。將發行包lib目錄下的三個檔案複製到其下面。
將發行包bin目錄下的freeglutd.dll檔案複製到C:\Windows\SysWOW64目錄中。如果您的作業系統是32位的,則需複製到C:\Windows\System32目錄中。
64位的作業系統在連結時將自動在C:\Windows\SysWOW64目錄中尋找freeglutd.dll,而32位的作業系統則自動在C:\Windows\System32目錄中尋找。因此,儘管我的作業系統是64位的,但由於我要開發的OpenGL應用僅為32位(這即是本文製作32位Freeglut發行包的原因),也應將這個32位的freeglutd.dll複製到C:\Windows\SysWOW64目錄中。
開發基於Freeglut的OpenGL應用
現在,我們要開發一個簡單的OpenGL應用,以驗證我們的32位Freeglut發行包是否能發揮作用。
啟動Visual Studio,建立一個Win32 Console Application的Visual C++項目,在main.cpp檔案輸入以下內容:
#include <GL/freeglut.h>void display() { glClear(GL_COLOR_BUFFER_BIT); glBegin(GL_POLYGON); glVertex2f(-0.5, -0.5); glVertex2f(-0.5, 0.5); glVertex2f( 0.5, 0.5); glVertex2f( 0.5, -0.5); glEnd(); glFlush();}int main(int argc, char** argv) { glutInit(&argc, argv); glutCreateWindow("Freeglut Hello World"); glutDisplayFunc(display); glutMainLoop();}
在Visual Studio中按下F5鍵,程式運行後,出現:
(很慚愧,我的OpenGL功力僅能讓此四邊形出現,僅此而已!但如果此話打擊了您進一步學習OpenGL的自信心,看看本部落格中我的頭像。這是我約在三年多前使用OpenGL製作的一個正十二面體,將其擺正後渲染得出的效果。)
別不相信,我們根本不需要在Visual Studio中進行更多的設定就能讓此程式運行起來。如,無需設定include目錄,因為我們已將相應的標頭檔複製到Visual Studio的預設包含目錄中;無需設定庫依賴關係,因為Freeglut已在其freeglut_std.h中自動為我們掛上了OpenGL應用所需的glu32.lib, opengl32.lib, gdi32.lib, winmm.lib, user32.lib這五個庫了;也無需將freeglutd.dll複製到應用目錄中,因為我們已將其複製到系統的預設路徑中。
是的,令人熱血澎湃的OpenGL應用原本就應該如此簡單!
為Visual Studio量身訂製Freeglut