WPF 3D開發教程(三)

2021-10-02 06:28:34 字數 1433 閱讀 8166

3d模型就是物體,是3d開發中的主角。我們在第一部分提過,使用三角網格法表示面。而三角形由頂點組成,每個面又有一定的材質,這些都是怎麼表示的呢?三角形面由positions和********indices兩個屬性確定,而材質的顯示主要由texturecoordinates和material兩個屬性確定。我們具體解釋一下這些屬性。

這是乙個矩形,我們最少用兩個三角形去表示它。不失一般性,可以用和兩個三角形表示這個矩形。positions是乙個point3d結構的列表,在xaml裡面,用一串字串表示這個列表,形式為:"x1,y1,z1 x2,y2,z2……"。上述兩個三角形合併到乙個字串裡,就有6個點,即:"0,2,0 1,0,0 1,2,0    0,2,0 0,0,0 1,0,0"。

上述的表示方法,似乎已經把這個面表示出來了。那********indices是幹什麼的呢?它是乙個positions索引的列表,如:"0 1 2 3 4 5",其表示,positions[0]、positions[1]、positions[2]組成乙個三角形,positions[3]、positions[4]、positions[5]組成另乙個三角形。

乍一看,似乎********indices是多餘的,其實不然。我們可以發現,p0、p3在兩個三角形裡面都出現了,對於複雜的3d模型,共用點的情況更多。那麼,儲存這麼多重複的點,是不是會浪費空間呢?當然。所以,對於上述平面,positions記錄4個點就可以了:"0,2,0 1,2,0 1,0,0 0,0,0"。

可這樣一來,究竟是哪些點組成乙個三角形呢?終於到********indices發揮作用的時候了。兩個三角形,就會有6個點,它的內容為:"0,2,3 0,3,1"。

material比較好理解,它可以是純顏色、漸變顏色、等,就像平面繪圖裡的solidcolorbrush、lineargradientbrush、imagebrush。

但我們的面都是由三角形組成的,乙個矩形怎麼對映到乙個三角形呢?

texturecoordinates是乙個二維點的列表,列表長度跟positions一致。二維點的取值是0-1,代表了在材質矩形中的位置。例如(0,0)表示材質矩形的左上角,(0,5,0,5)表示矩形的中心。

假設有乙個三角形的texturecoordinates為(0.2,0 0,1 1,1),則其表示乙個三角形擷取了以下區域:

然後這個三角形變形到真實的形狀,即為渲染後的效果:

WPF 3D開發教程(一)

我們知道,在2d平面繪圖時,wpf使用的座標系 其實計算機上的圖形處理一般都是這樣 是以螢幕左上角為原點,向右為x軸正方向,向下為y軸正方向。而wpf的3d座標系,取區域中心為原點,向右為x軸正方向,向上為y軸正方向,z軸正方向垂直於螢幕指向我們。這是乙個右手系,讀者可以伸出自己的右手,做下圖所示動...

WPF 3D相機基本座標簡介

基本概念 wpf中3d空間基本座標系是右手座標系。wpf中3d空間的原點是 0,0,0 position 這個引數用來表示相機在空間內的座標。引數是 x,y,z 當修改相機的這個引數時,這個座標是根據原點修改。這個概念是最為簡單理解的 綠色方塊為相機 lookdirection 這個引數表示相機看的...

Unity3D嵌入WPF教程

建立乙個 類庫工程 新增 windowform 使用者控制項 usercontrol 1 引入 untiywebplayer com 元件 在工具 選擇工具箱中找到unitywebplayer.dll並新增 2 在使用者控制項中新增unitywedplayer控制項 在工具箱中直接拖拉即可 2 將 ...