課件第23課三維電子沙盤交互一張圖 用WPF構建 3D GIS系統

課件第23課三維電子沙盤交互一張圖 用WPF構建 3D GIS系統 武警部隊公安消防應急指揮調度

上一節我們實現了模型的移動控制。這次我們來實現模型的材質控制,首先我們找一個模型。在3dmax中如下:

可以看到這個模型很複雜。分成了很多層。我們先不管它。導入SDK後如下圖:

有貼圖還是比較漂亮了。。下面我們用代碼,把整個建築變成藍色科幻的效果,並把其中某一層用上一節的方法拉出來單獨查看:

private void Button_Click(object sender, RoutedEventArgs e)
        {
            
            GisObjectFor3DSFile va = (GisObjectFor3DSFile)IniRead.IniReadWrite.BiaoManage.BiaoList[0];//從當前場景中找到模型標號
            var g1 = va.ModeTree["I:\\3D\\123.3DS"].ChildName[0];
          foreach(var key in ((Model3DGroup)((g1.Value))).Children)
            {
                if (key is Model3DGroup)
                    ChuLi((Model3DGroup)key);
 
                if (key is System.Windows.Media.Media3D.GeometryModel3D)
                {
                    ((GeometryModel3D)key).Material = new DiffuseMaterial(vaBrush);
                    ((GeometryModel3D)key).BackMaterial = new DiffuseMaterial(vaBrush);
                }
            }
 
 
 
            var aa = va.FindNode("D20");//從模型標號中找到二樓
            TranslateTransform3D p1 = new TranslateTransform3D();
            p1.OffsetX = aa.Value.Transform.Value.OffsetX + aa.Value.Bounds.SizeX;
            p1.OffsetY = aa.Value.Transform.Value.OffsetY;
            p1.OffsetZ = aa.Value.Transform.Value.OffsetZ;
            //利用wpf中自帶的移動器把它移出來,這裏也可以加上動畫
 
            aa.Value.Transform = p1;
 
        }
        private ImageBrush vaBrush = new ImageBrush(new BitmapImage(new Uri(@"D:\MTOUCH GIS\res\house\30.png")));
        private void ChuLi(System.Windows.Media.Media3D.Model3DGroup va)
        {
            foreach(var aa in va.Children)
            {
                if(aa is System.Windows.Media.Media3D.GeometryModel3D)
                {
                    ((GeometryModel3D)aa).Material = new DiffuseMaterial(vaBrush);
                    ((GeometryModel3D)aa).BackMaterial= new DiffuseMaterial(vaBrush);
                }
                if (aa is Model3DGroup)
                    ChuLi((Model3DGroup)aa);
            }
        }
最終出來的效果如下圖:

順便說一下,這些材質可以根據用戶自己的情況替換成不同的貼圖,這個就可以自由發揮了。SDK中提供一個基礎面板,可以將這個模型中的某一部分單獨開一個窗口來查看,也可以單獨標圖如下圖:

 


————————————————
版權聲明:本文爲CSDN博主「種瓜的」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/xtgmd168/article/details/104695618

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章