日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

WPF 3D:使用GeometryModel3D的BackMaterial

發布時間:2024/4/17 asp.net 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 WPF 3D:使用GeometryModel3D的BackMaterial 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
WPF 3D:使用GeometryModel3D的BackMaterial

原文?WPF 3D:使用GeometryModel3D的BackMaterial

使用BackMaterial,我們可以定義3D物體的內部材質(或者說是背面),比如,我們定義一個四方體容器,外面現實的是普通材質,里面的則是內部材質。比如下圖,紅色的是內部材質:

?

GeometryModel3D.BackMaterial默認是null,所以如果不定義他的話,背面的材質是不會顯示,上面的程序則會運行成這樣:

?

定義材質很簡單,設置GeometryModel3D.Material屬性和BackMaterial,放置任何一個繼承與Material類型的對象,這里就以最普通的DiffuseMaterial做示范:

<GeometryModel3D.Material>
<DiffuseMaterial Brush="Green"/>
</GeometryModel3D.Material>
<GeometryModel3D.BackMaterial>
<DiffuseMaterial Brush="Red"/>
</GeometryModel3D.BackMaterial>

?很簡單,難點則在于怎樣正確定義。

?

WPF MeshGeometry3D中,逆時針定義的三角形代表著正面,也就是說會被Material屬性填充,而他的背面會被BackMaterial填充。上面中的3D圖形是4個面,每個面4個點,這樣一共16個點,分別將外面的面中的三角形逆時針定義。注意要在立體空間內將每個對外的面的三角形都逆時針定義或許考驗你的空間想象力,做個簡單的演示圖如下:

?這樣的話,先在Positions中定義的所有點,然后根據三角形的定義方向再定義TriangleIndices就可以了。代碼:

<MeshGeometry3D Positions="-1 1 1, 1 1 1, -1 -1 1, 1 -1 1, -1 1 -1, 1 1 -1, -1 -1 -1, 1 -1 -1
1 1 1, 1 1 -1, 1 -1 1, 1 -1 -1, -1 1 1, -1 1 -1, -1 -1 1, -1 -1 -1"
TriangleIndices="0 2 1, 1 2 3, 5 6 4, 5 7 6
8 10 9, 9 10 11, 13 14 12, 13 15 14"/>

?這樣就得到了上面的3D圖形(文章下面有完整的XAML代碼)。

?

如果我們把一個三角形改成順時針定義的,比如第一個點,把TriangleIndices中的逆時針定義的0 2 1點改成1 2 0。第一個三角形則會被填充成BackMaterial,結果成了下圖:

?

完整的代碼:

<Viewport3D>
<Viewport3D.Camera>
<PerspectiveCamera Position="-2.5 2.5 5" LookDirection="0.5 -0.5 -1"/>
</Viewport3D.Camera>
<ModelVisual3D>
<ModelVisual3D.Content>
<Model3DGroup>
<DirectionalLight Direction="1 0 -7"
Color="White"/>
<GeometryModel3D>
<GeometryModel3D.Geometry>
<MeshGeometry3D Positions="-1 1 1, 1 1 1, -1 -1 1, 1 -1 1, -1 1 -1, 1 1 -1, -1 -1 -1, 1 -1 -1
1 1 1, 1 1 -1, 1 -1 1, 1 -1 -1, -1 1 1, -1 1 -1, -1 -1 1, -1 -1 -1"
TriangleIndices="0 2 1, 1 2 3, 5 6 4, 5 7 6
8 10 9, 9 10 11, 13 14 12, 13 15 14"/>
</GeometryModel3D.Geometry>
<GeometryModel3D.Material>
<DiffuseMaterial Brush="Green"/>
</GeometryModel3D.Material>
<GeometryModel3D.BackMaterial>
<DiffuseMaterial Brush="Red"/>
</GeometryModel3D.BackMaterial>
</GeometryModel3D>
</Model3DGroup>
</ModelVisual3D.Content>
</ModelVisual3D>
</Viewport3D> posted on 2015-04-22 21:23 NET未來之路 閱讀(...) 評論(...) 編輯 收藏

轉載于:https://www.cnblogs.com/lonelyxmas/p/4448721.html

總結

以上是生活随笔為你收集整理的WPF 3D:使用GeometryModel3D的BackMaterial的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。