上一篇文章給大家介紹了OpenGL開發的基礎知識,本文介紹如何在.NET平台中配置和開發OpenGL程序。
在介紹.NET平台中配置之前,我想先給大家介紹下如何在VC6.0的環境中配置,因為我使用時是使用VC6.0作為開發環境的,而且VC6.0在Windows中地位,你懂的。
開發OpenGL程序主流的環境是Visual Studio,Broland C++ Builder和VC6.0開發環境,下面是VC6.0中配置方法。
1. VC6.0配置
Windows環境下的配置文件下載地址:/Files/hanyonglu/OpenGL/OpenGL.rar
下載文件后將其解壓,找到VC6.0安裝的地址,我的VC6.0安裝地址是:d:\Program Files\Microsoft Visual Studio\VC98\include\
(1) 在include文件夾下查看是否存在名字為"gl"的文件夾,如果不存在則直接創建。將解壓后的GLUT.H文件復制到gl文件夾下。
(2) 將解壓后的glut.lib和glut32.lib兩個文件放到靜態函數庫所在文件夾,即放在d:\Program Files\Microsoft Visual Studio\VC98\lib目錄下。
(3) 將解壓得到的glut.dll和glut32.dll放到操作系統目錄下面的system32文件夾內,即放在C:\Windows\System32目錄下。
然后我們需要打開VC6.0創建一個工程,創建時需要創建一個Win32 Console Application,在這里也需要進行相應的設置:
(1) 鏈接OpenGL libraries:在Visual C++中先單擊Project,再單擊Settings,再找到Link單擊,最后在Object/library modules 的最前面加上opengl32.lib Glut32.lib Glaux.lib glu32.lib。
(2) 單擊Project Settings中的C/C++標簽,將Preprocessor definitions 中的_CONSOLE改為__WINDOWS。最后單擊確定。
(3) 需要引入頭文件:#include <gl/glut.h>
這樣,VC6.0中的配置完畢,我們就可以使用VC6.0開始我們的OpenGL開發之旅。
2. Visual Studio2010配置
接下來讓我們看下.NET平台中的配置。在.NET中進行OpenGL程序的開發,給我們.NET開發人員帶來了不少的便利,我們不必去使用VC6.0環境仍然可以做出很炫的圖形程序。
就.NET開發OpenGL程序而言,目前我知道有幾種解決方案,大多是使用第三方庫,以下給大家介紹幾種。
第一種解決方案:直接調用OpenGL函數庫
使用這種方案是我們可以使用C#調用OPENGL32.DLL、GLU32.DLL以及GLUT32.DLL類庫,即是使用如下代碼格式直接調用:
//OpenGL常量聲明 public const uint GL_COLOR_ BUFFER_ BIT = 0x0004; public const uint GL_MODELVIEW = 0x1700; public const uint GL_PROJECTION =0x1701; //函數入口聲明 [DllImport("opengl32.dll")] public static extern void glClear(uint mask); [DllImport("opengl32.dll")] public static extern void glBegin(uint mode); [DllImport("opengl32.dll")] public static extern void glEnd();
在OpenGL中的函數多達幾百個,如果我們使用這樣的方式編寫OpenGL程序,實在是繁鎖,所以這種方案在.NET中使用得特別少。關於這個方案大家了解就行,不必使用。
第二種解決方案:使用SharpGL擴展庫
SharpGL是一個能讓我們很輕松的在Windows窗體中和WPF中使用OpenGL的擴展庫,它能夠設置一個強大的場景圖和Visual Studio模板。我們使用它很容易開發出3D圖形程序或將代碼移植到其它的平台中。
它是一個讓.NET開發人員興奮的擴展庫,讓我們簡要看一下使用它開發出的一些優秀圖形程序效果圖,如下所示:
上圖是徑向模糊示例,顯示了如何創建先進的燈光效果。
這是一個猶他茶壺的WPF示例。直接使用OpenGL渲染一個WPF應用程序。SharpGL OpenGLControl提供了一個直接在您的應用程序的OpenGL渲染表面。
這是一個紋理效果示例,使用該擴展庫可以加速開發OpenGL像這樣的紋理功能,用於加載和轉換成OpenGL紋理的圖像數據。
這是一個撞擊測試示例。
以上是使用SharpGL開發出的一些圖形示例。那么SharpGL包含哪些功能呢?
SharpGL是一個擴展庫,能讓我們在代碼中使用OpenGL功能的集合。命名空間包括:
(1) SharpGL: 包含OpenGL的主要對象,這個對象封裝了所有的OpenGL函數,枚舉和擴展。
(2) SharpGL.SceneGraph: 包含所有包裝OpenGL的對象和場景中的元素-燈光,材料,紋理,材質等。
(3) SharpGL.WinForms: 為我們的應用程序包含Windows窗體控件。
(4) SharpGL.WPF: 為我們的應用程序包含WPF控件。
(5) SharpGL.Serialization: 包含用於裝載幾何和來自於3D Studio Max文件的數據、不引人注意的obj文件和trueSpace文件的類。
在這些擴展庫中,SharpGL包裝了所有當前的OpenGL函數,所有主要的擴展和一套豐富的先進功能的對象。我們可以使用SharpGL的執行傳統的OpenGL繪圖,也可以使用場景圖以實現更多的應用程序的具體任務。
既然SharpGL是那么優秀的一個擴展庫,我們該如何使用SharpGL去開發我們的OpenGL程序呢?
如果我們看到了C語言實現的OpenGL程序代碼,例如下面的代碼:
// 設置線的寬度和點大小 glLineWidth(3.0f); glPointSize(2.0f);
那么我們就可以在.NET中按如下代碼方式使用SharpGL:
// 獲取一個OpenGL對象的引用 OpenGL gl = openGLCtrl1.OpenGL; // 設置線和的寬度和點大小 gl.LineWidth(3.0f); gl.PointSize(2.0f);
SharpGL中的函數去掉了gl和glu,去掉gl和glu開頭的函數和原來是一樣的。
一般的規則是這樣,但是也有一些例外的,比如像這樣的代碼:
// 設置顏色 glColor3f(0.5f, 0.5f, 0.5f); glVertex3f(2.0f, 3.0f 4.0f); glVertex4f(2.0f, 1.0f, 10.0f, 1.0f);
使用SharpGL時則需要寫成如下格式:
// 設置顏色 gl.Color3(0.5f, 0.5f, 0.5f); // Output some vertices. gl.Vertex3(2.0f, 3.0f 4.0f); gl.Vertex4(2.0f, 1.0f, 10.0f, 1.0f);
看到帶有參數的代碼時,如下:
// 設置多邊形模式. glPolygonMode(GL_FRONT, GL_FILL);
使用SharpGL時則需要寫成如下格式:
// 設置多邊形模式 gl.PolygonMode(OpenGL.GL_FRONT, OpenGL.GL_FILL);
或者是如下格式:
// 設置多邊形模式 gl.PolygonMode(PolygonFace.Front, PolygonMode.Fill);
OpenGL中的常量都被定義成SharpGL.OpenGL類中的成員,並且和原來的常量有相同的名字。
這樣做的目的是為了兼容標准C語言寫的OpenGL代碼。
通過一些簡單的描述,我們大家大概知道了如何在.NET里編寫代碼,但是怎么在Visual Studio里創建這樣的項目呢?如何搭建這樣的框架呢?
首先我們需要下載擴展庫,然后直接雙擊安裝它。擴展庫下載地址如下:
擴展庫下載地址: 點擊下載
下載后解壓並雙擊SharpGL.vsix,我們將會看到如下安裝界面:
安裝完畢后,打開我們的Visual Studio(以我個人為例,我用的是Visual Studio2010)並新建項目,我們將會看到多了兩個新的項目模板,如下圖所示:
選擇Sharp Windows Forms Application項目,點擊確定后,將會創建一個默認的程序,運行效果是一個旋轉的金字塔,如下圖所示:
同樣的道理,選擇SharpGL WPF Application項目,將會創建一個默認的WPF版的程序,運行效果同上。
這個擴展庫感覺不錯,因為他可能很容易將VC6.0環境中的圖形程序移植過來,有興趣的朋友可以使用。
第三種解決方案:使用CsGL庫
CsGL庫也是一個非常不錯的庫,有關這個庫的詳細信息有興趣的朋友可以查看:http://csgl.sourceforge.net/index.html
CsGL提供了兩個關鍵的dll:csgl.dll和csgl.native.dll,使用前需要將這兩個dll復制到C:\Windows\System32目錄下並在程序中實現引用。
在程序代碼中需要添加命名空間:using CsGL.OpenGL;
CsGL庫下載:/Files/hanyonglu/OpenGL/csgl.1.4.1.dll.zip
CsGL文檔下載:/Files/hanyonglu/OpenGL/csgl.1.4.1.doc.zip
CsGL的使用還是挺多的,關於CsGL庫的詳細信息不再細述,有興趣的朋友直接查看官方文檔。
第四種解決方案:使用OpenTK框架
OpenTK是對OpenGL、OpanAL、OpenCL的跨平台的封裝,可以運行在Windows、Linux 以及MacOSX 平台上,任何.Net 語言都可以使用它做開發我們的圖形程序,很容易集成到我們Windows Forms、WPF或其他的程序中。
關於OpenTK項目的地址:http://sourceforge.net/projects/opentk/files/opentk/nightly/
上面提供了一些源碼示例,如果有過OpenGL開發經驗的朋友很容易就能讀懂這些源碼,有興趣的朋友可以研究下。
第五種解決方案:使用Tao框架
Tao框架也是C#使用OpenGL庫的一種方式,Tao框架中封裝了許多的C庫,使得我們在C#中使用這些庫函數比較容易。Tao框架還綁定了Mono,所以可以在Linux和MacOSX中使用。
除了封裝OpenGL庫以外,Tao框架還還封裝了其它的庫,如下圖所示:
Tao框架中提供了許多有用的庫,這些庫在實際中有很的應用示例,不但可以編寫非常出色的圖形程序,也可編寫其它的程序。
下載地址:/Files/hanyonglu/OpenGL/Executable.rar
第六種解決方案:使用CSopenGL庫
關於該庫的信息,有興趣的朋友可以到網上搜索下,這里不再詳述,這個庫使用得不多。
庫下載地址:/Files/hanyonglu/OpenGL/dll.rar
以上就是關於在.NET平台下開發OpenGL程序的解決方案和配置方法,方便我們.NET開發人員開發圖形程序。
最后,希望轉載的朋友能夠尊重作者的勞動成果,加上轉載地址:http://www.cnblogs.com/hanyonglu/archive/2012/06/12/2546581.html,謝謝。
完畢。^_^