土木工程三維模型愛好者必看:基於 C 的三維模型可視化技術

土木工程三維模型愛好者必看:基於 C 的三維模型可視化技術

本文基於 Visual C#.NET 開發環境,介紹了利用 DirectX 和 OpenGL 圖形接口實現三維模型可視化顯示的方法 ,並通過示例程序對以上兩種接口的顯示效果和執行效率進行了綜合比較,為進一步實現三維模型可視化技術在計算機輔助設計系統中的應用提供了理論和現實依據。

隨著計算機軟硬件技術的飛速發展和計算機圖形學的日趨成熟,傳統的機械產品二維設計方法最終將被三維設計方法所取代。在現代三維 CAD 系統中, 三維模型可視化無疑是實現產品優化設計的基礎和前提。 一方面,三維可視化技術有助於更為準確直觀的表達所設計產品的內部結構;另一方面,也為虛擬裝配及有限元分析等高級設計技術的實現提供了必要的支持。DirectX 和 OpenGL 是兩種成熟的 3D 圖形接口,能夠方便高效地處理複雜三維模型。 本文研究了在 C# 環境下應用以上兩種接口實現三維可視化程序開發的基本方法,並對兩種接口進行了綜合評價。

1.開發環境及接口簡介

本文的開發環境為 Visual C#.NET 2008;圖形接口分別為 DirectX9.0c 和 CSGL 1.4.1.0。

1.1 C# 簡介

Visual C#.NET 是以.NET 框架為基礎的一種高級編程語言,它集中了眾多關於軟件開發的最新成果,被譽為編寫基於面向對象和視窗系統的程序語言中高效開發的首選。 與其他語言相比,C# 的程序執行效率更高,語法更簡潔,調試更容易,從而大大加快了開發速度,有效降低了開發成本。1.2 DirectX 簡介 DirectX 是微軟公司提供的一套非常優秀的應用程序接口, 其中包含了設計高性能多媒體應用程序開發工具包,稱為 DirectX SDK。

工具包主要包括 Direct3D,DirectInput 等模塊, 其中Direct3D 是負責三維圖形處理的組件,它能夠與操作系統及桌面程序默契配合;可以利用硬件廠商提供的驅動程序接口,直接進行底層硬件操作,從而使程序獲得最佳的性能和效果 [1,2]。1.3 OpenGL 簡介 OpenGL 是 SGI 公司推出的一個跨平臺 、跨語言的專業圖形接口,它提供了 100 種以上的圖形操作函數,開發者可以利用這些函數實現三維模型的顯示和實時交互。 而 CSGL 則正是專門為 C# 開發環境提供的標準 OpenGL 接口,功能強大,調用方便 [3,4]。

2.三維模型可視化的程序實現

2.1 三維可視化實現原理

要實現三維模型可視化,我們要先建立虛擬三維模型。 在模型建立過程中,計算機根據用戶所提供的命令和參數對模型的關鍵點進行描述, 並通過關鍵點的連接以及點、 線、面、方向等參數的量化,最終構成三維模型。 事實上,我們只生成了模型的外表面,而由於各種模型的差異太大,計算機處理起來十分困難,所以真正的模型表面常常被細化為眾多小三角的集合來處理 [5]。建立了虛擬的三維模型後, 我們還要把它在屏幕上顯示出來,這與日常生活中的相機拍照原理十分類似,都是將一個三維實體以一定的投影方式投影到一個二維平面上(如圖 1 所示)。 所以在三維可視化技術中,只要知道視點位置,視線方向和範圍,以及投影平面位置等參數, 通過適當的投影變換就可以將複雜三維模型清晰地顯示在屏幕上。圖形接口不但可以通過簡單的函數幫助我們實現虛擬三維模型的建立和屏幕投影變化等複雜的功能,而且還可以驅動低層硬件完成三維模型的輸出。這樣,我們只需要對圖形接口進行操作,而不需要對底層硬件進行操作,即可實現複雜三維模型的可視化顯示。

土木工程三維模型愛好者必看:基於 C 的三維模型可視化技術

圖 1 三維模型在平面上的投影簡圖

基於 DirectX 和 OpenGL 的三維模型可視化程序的實現流程 (如圖 3 所示)十分的相似,只是在代碼的語法方式上有所區別。

土木工程三維模型愛好者必看:基於 C 的三維模型可視化技術

圖 2 三維可視化程序的實現流程

2.2 基於 DirectX 的實現方法

(1)首先,

在項目屬性中添加對於 DirectX 的引用,然後在程序的開始部分添加命名空間:

using Microsoft.DirectX;using Microsoft.DirectX.Direct3D;

(2)定義並創建設備和節點緩衝區 :

//創建設備代碼

device = new Device (Manager.Adapters.Default.Adapter, DeviceType.Hardware, this.Handle, CreateFlags.SoftwareVertex Processing,presentParams);

//創建節點緩衝區代碼

vertbuffer = new VertexBuffer (typeof (CustomVertex.PositionColored), num, device, Usage.WriteOnly, VertexFormats.Position |VertexFormats. Diffuse, Pool.Default);

(3)初始化相關參數,

建立三維環境,

例如://建立三維空間 x 為長度 y 為寬度 z1+z2 為深度

device.Transform.Projection = Matrix.OrthoLH(x, y, z1, z2);

(4)為相應的節點賦值:

//X,Y,Z 為幾何座標,Color 為顏色verts[0] = new CustomVertex.PositionColored(X, Y, Z, Color);

(5)在循環內編寫繪圖語句:

//清空三維空間,

為繪圖做準備

device.Clear(ClearFlags.Target|ClearFlags.ZBuffer,Color.White,1F, 0);device.BeginScene();

//從緩衝區讀入數據

device.SetStreamSource( 0, vertbuffer, 0);

//以三角圖元繪圖(相鄰三個節點連接)

device.DrawPrimitives( PrimitiveType.TriangleList, 0, num) ;device.EndScene();

//更新顯示

device.Present();

(6)程序關閉時應先卸載設備:VertBuffer.Dispose();VertBuffer = null;Device.Dispose();Device = null;

土木工程三維模型愛好者必看:基於 C 的三維模型可視化技術

圖 3 基於 DirectX 的實現效果

2.3 基於 OpenGL 的實現方法

(1)OpenGL 同樣要在項目中添加引用,然後在程序的開始部分添加對 CsGL 命名空間的引用:using CsGL.OpenGL;

(2)OpenGL 中定義並創建設備環境的方法與 DirectX 有較大差距,OpenGL 中需要先定義出組件類,再將組件加載到窗體上:

//定義組件類

Public class myview: OpenGLControl{……}

//加載組件

view = new myopengl.myview();view.Parent = this;view.Dock = DockStyle.Fill;

(3)初始化相關參數,

例如:

//建立三維環境

GL.glOrtho(x1, x2, y1, y2, z1, z2);(4)OpenGL 的 節 點 賦 值 也 繪 圖 語 句 是 一 同 編 寫 的, 這 也 是OpenGL 與 DirectX 的最大不同:

//R,G,B 為紅、綠、藍三原色

(0-255)GL.glColor3f(R, G, B);

//以三角形圖元開始繪製

GL.glBegin(GL.GL_ TRIANGLES);

//為三角形的 3 個節點賦值

GL.glVertex3f(X1, Y1, Z1);……GL.glEnd();

(5)程序關閉時同樣要先卸載設備:

view.Dispose();view = null;

土木工程三維模型愛好者必看:基於 C 的三維模型可視化技術

圖 4 基於 OpenGL 的實現效果

3.結論

C# 是一種簡單高效的程序設計語言, 本文在 C# 開發環境下,結合 DirectX 和 OpenGL 三維圖形接口實現了三維模型的可視化顯示,程序顯示效率高,顯示效果好。 經過測試對比:在 Windows 系統環境下,同樣由 Microsoft 開發的 DirectX 圖形接口,佔用系統資源小,具有更好的兼容性。 從總體上講,兩種接口各具特色,各有所長,都是進行三維模型可視化處理的利器。


分享到:


相關文章: