通過 Windows Presentation Foundation (WPF) 中的三維功能,開發人員可以使用标記代碼和程式代碼對三維圖形進行繪制、轉換和動畫處理。 開發人員可以合并二維和三維圖形以建立豐富的控件,提供複雜的資料圖解,或者增強使用者對應用程式界面的體驗。WPF 中的三維支援并非旨在提供功能齊全的遊戲開發平台。本主題概述了 WPF 圖形系統中的三維功能。
本主題包括下列各節。
<a href="https://msdn.microsoft.com/zh-cn/library/ms747437.aspx#threed_in_2d">二維容器中的三維</a>
<a href="https://msdn.microsoft.com/zh-cn/library/ms747437.aspx#coord_space">三維坐标空間</a>
<a href="https://msdn.microsoft.com/zh-cn/library/ms747437.aspx#cameras">照相機和投影</a>
<a href="https://msdn.microsoft.com/zh-cn/library/ms747437.aspx#models_meshes">模型和網格基元</a>
<a href="https://msdn.microsoft.com/zh-cn/library/ms747437.aspx#materials">向模型應用 Material</a>
<a href="https://msdn.microsoft.com/zh-cn/library/ms747437.aspx#lights">照亮場景</a>
<a href="https://msdn.microsoft.com/zh-cn/library/ms747437.aspx#transforms">變換模型</a>
<a href="https://msdn.microsoft.com/zh-cn/library/ms747437.aspx#animations">對模型進行動畫處理</a>
<a href="https://msdn.microsoft.com/zh-cn/library/ms747437.aspx#animations1">向視窗中添加三維内容</a>
<a href="https://msdn.microsoft.com/zh-cn/library/ms747437.aspx#seeAlsoToggle">相關主題</a>
<a>二維容器中的三維</a>
<a></a>
<a>三維坐标空間</a>
二維圖形的 WPF 坐标系将原點定位在呈現區域(通常是螢幕)的左上角。 在二維系統中,x 軸上的正值朝右,y 軸上的正值朝下。 但是,在三維坐标系中,原點位于呈現區域的中心,x 軸上的正值朝右,但是 y 軸上的正值朝上,z 軸上的正值從原點向外朝向觀察者。
傳統的二維和三維坐标系表示形式

由這些軸定義的空間是三維對象在 WPF 中的固定參考架構。 當您在該空間中生成模型并建立光源和照相機以檢視這些模型時,一定要在向每個模型應用變換時,将固定參考架構或“全局空間”與您為該模型建立的局部參考架構區分開。 另請記住,根據光源和照相機設定,全局空間中的對象可能會看上去完全不同或者根本不可見,但是照相機的位置不會改變對象在全局空間中的位置。
<a>照相機和投影</a>
照相機位置
透視投影和正投影
下面的代碼示範一些典型的照相機設定。
<a>C#</a>
<a href="https://msdn.microsoft.com/zh-cn/library/ms747437.aspx?cs-save-lang=1&cs-lang=vb#code-snippet-1">VB</a>
<a>模型和網格基元</a>
若要生成模型,請首先生成一個基元或網格。 三維基元是一系列構成單個三維實體的頂點。 大多數三維系統都提供在最簡單的閉合圖(由三個頂點定義的三角形)上模組化的基元。 由于三角形的三個點在一個平面上,是以您可以繼續添加三角形,以便對網格這樣較為複雜的形狀模組化。
<a>XAML</a>
下面的示例示範如何在過程代碼中建立立方體模型的一面。 請注意,您可以将整個立方體繪制為單個 GeometryModel3D;此示例将該立方體的各個面繪制為一個不同的模型,以便在以後向每個面應用不同的紋理。
<a>VB</a>
<a>向模型應用 Material</a>
下面的代碼示例示範如何将純色和繪圖以畫筆形式應用于三維模型。
<a>照亮場景</a>
與實際的光一樣,三維圖形中的光能夠使圖面可見。 更确切地說,光确定了場景的哪個部分将包括在投影中。 WPF 中的光對象建立了各種光和陰影效果,而且是按照各種實際光的行為模組化的。 您必須至少在場景中包括一個光,否則模型将不可見。
<a>變換模型</a>
當您建立模型時,它們在場景中具有特定的位置。 為了在場景中移動、旋轉這些模型或者更改這些模型的大小而更改用來定義模型本身的頂點是不切實際的。 相反,正如在二維中一樣,您可以向模型應用轉換。
<a>對模型進行動畫處理</a>
<a>向視窗中添加三維内容</a>