『壹』 關於C# 請問怎樣可以在C#中用wpf做出一個3D場景查看窗體 請問用什麼控制項啊求代碼詳解 我
在wpf里有兩種3d效果:一種是藉助於3d引擎的真3D,一種是藉助於繼承System.Windows.Controls.Panel里的某些仿3D控制項的偽3D。一般都是用第二種,因為這樣既省資源也效果不錯。
給你幾個鏈接做參考吧:
http://www.silverlightchina.net/html/study/WPF/2013/0215/21833.html
http://www.silverlightchina.net/html/study/WPF/2012/1211/20773.html
http://www.silverlightchina.net/html/study/WPF/2012/1129/20502.html
『貳』 WPF導入OBJ模型後怎麼獲得這個模型對象
你下的OBJ模型應該是3D掃描成的模型吧,在特定軟體下3D掃描是會自動把貼圖掃描上的,也就是你第一張圖顯示的那樣,但導入max就只會是一個白模,因為沒有UV來確立模型的貼圖。所以,這不是導入的問題,導入max本身就是顯示灰白色的。什麼是UV,那自己網路一下學習吧。而且3D掃描成的模型本身面數和布線都是雜亂無法在max裡面編輯的。
過大可能是因為你兩個文件製作的時候MAX設置的默認單位不同(分開製作多個文件最後合並的項目中最常見也是最需要注意的問題)沒什麼特別的方法,先把大模型縮小點,然後導出OBJ,打開另一個MAX文件,導入剛才導出的OBJ,再匹配調整大小。
如果你已經做了貼圖,先調整大小,存一版(備份)。然後merge(中文版可能叫合並)另一個MAX文件進來。最後調整匹配大小。
如果你說的是模型容量太大,先把這個模型的布線整理一下,沒用的線該刪的刪,該並的並,貼圖材質球沒用的也要清理,然後把整個模型再轉一次多邊形(這步是為了清理一些沒用的編輯歷史),還有如果有貼圖,可以盡量縮小一下貼圖的尺寸,如果貼圖過多導致材質球比較多,可以用多位子材質球給模型面分ID來實現精簡。
『叄』 WPF 3D模型 用什麼軟體製作
1.用3DMax做好模型導出obj格式,然後用blend把obj搞成xaml
2.用3DMax做好模型導出3Ds格式,然後用zam3D 導成xaml,zam3D 就是干這活的
『肆』 WPF 3D中如何選擇模型的一部分並維護模型
我選擇了一個方塊,將方塊顯示為藍色,同時屏幕坐上顯示了點擊方塊後的操作。整個流程我處理了兩個問題:1. 如何選擇模型的這一部分2. 如何維護你選擇的這個部分 問題1:如何選擇模型的這一部分由於WPF 3D模型中只有Viewport3D對象有MouseButtonLeftDown事件,而模型的某個部分是沒有這個事件的。因此需要使用首先VisualTreeHelper.HitTest來確定具體點擊的是哪個模型,同時這個模型是需要給外部用的,因此我們自定義了一個的事件給外部調用。 1 //自定義個一個模型選中的EventHandler 2 public class Visual3DEventArgs : EventArgs3 {4 public ModelVisual3D Visual3D { get; set; }56 public Visual3DEventArgs(ModelVisual3D modelVisual3D)7 {8 this.Visual3D = modelVisual3D;9 }10 }1112 public delegate void (object sender, Visual3DEventArgs args);13 //....
14 15 //聲明Viewport3D的LeftButton事件16 ViewPort.MouseLeftButtonDown += ViewPort_MouseLeftButtonDown;1718 //Viewport LeftButton的函數19 void ViewPort_MouseLeftButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs args)20 {21 Point mousePos = args.GetPosition(ViewPort);
22 var hitParams = new PointHitTestParameters(mousePos);
23 VisualTreeHelper.HitTest(ViewPort, null, ResultCallback, hitParams);24 }2526 //根據HitTest選中之後的處理27 private HitTestResultBehavior ResultCallback(HitTestResult result)28 {29 RayHitTestResult rayResult = result as RayHitTestResult;3031 if (rayResult != null)32 {33 var visual3D = result.VisualHit as ModelVisual3D;
34 if (visual3D != null)35 {36 if (OnModelSelected != null)37 {38 OnModelSelected(this, new Visual3DEventArgs(visual3D));39 }4041 return HitTestResultBehavior.Stop;42 }4344 }45 return HitTestResultBehavior.Continue;
46 } 2. 問題2:如何維護你選擇部分我剛剛在Visual3DEventArgs中已經獲得了選擇的模型了,這時候我就可以對它進行操作了。或許資料庫中有個模型叫"block1",查找數據等等.... 但是很悲催的是, 雖然在xaml文件中ModelVisual3D是有x:name的,但是ModelVisual3D本書是沒有 ModelVisual3D.Name這個屬性的,即使獲取了這個模型,也只能對其進行基本的渲染,根本沒有辦法進行邏輯操作(例如根據資料庫通信等)。 只有通過viewport3D.FindName(string name)才能獲取對象! 解決辦法是:我們自己可以維護一個模型名字表(其實就是個xml文件): dg01 dg02 dg04 然後定義一個返回名字的函數: 1 public Section GetSelSection(ModelVisual3D visual3D)2 {3 if (_context != null && _context.Sections != null && visual3D != null)4 {5 var viewPort = _context.Model.ViewPort;67 foreach (var section in _context.Sections)8 {9 if (viewPort.FindName(section.Name) == visual3D)10 {11 return section;12 }13 }14 }15 17 return null;
18 } 我就可以通過GetSelSection(args.Visual3D)獲得這個section對象了。對了,這個Section就是剛才XML文件的映射類。
『伍』 WPF如何提升三維呈現性能及優化
一、圖形硬體加速
wpf中的圖形呈現都是通過圖形卡的GPU來進行計算處理的,一般WPF 系統定義了三個呈現層:呈現層 0 無圖形硬體加速。DirectX 版本級別低於 7.0;呈現層 1 部分圖形硬體加速。DirectX 版本級別高於或等於 7.0 且低於 9.0。視頻 RAM必須大於或等於30MB。多紋理單元單元數必須大於或等於 2(顯卡AGP速率2X);
呈現層 2 大多數圖形功能都使用圖形硬體加速。DirectX 版本級別高於或等於 9.0。視頻 RAM必須大於或等於120MB。多紋理單元單元數必須大於或等於 4(顯卡AGP速率4X或更高8X、16X)。
二、三維模型材質的使用
一般三維模型材質的使用,多數會用到Brush,但不同的Brush材質呈現的速度也不同,SolidColorBrush(直接給模型添加固有色) 、LinearGradientBrush 相對於ImageBrush、VisualBrush等運算速度要快得多,已緩存的Brush比未緩存的Brush快。
三、模型的創建
在三維場景中我們盡量創建GeometryModel3D三角面片小於60.000個,頂點小於20.000個,盡量重復使用外形變化不大的模型,除非有新形狀需要從新創建模型,盡量在一個viewport3D中創建子模型不要創建多個viewport3D。
四、關於3d抗鋸齒
wpf中的3d抗鋸齒,只適合於vista系統,如果想在xp系統下實現抗鋸齒,可以在注冊表中設置最大多級采樣值 HKEY_CURRENT_USER/SOFTWARE/Microsoft/Avalon.Graphics/MaxMultisampleType 值類型為DWORD一般設為4 根據顯卡的性能進行合適的調整。(不過建議最好不使用這種方法,使用修改注冊表可以實現抗鋸齒,但同時也可能會產生新的呈現問題,比如:三維模型體貼與其他對象重疊產生圖形邊緣出現虛線等,不過通過設置顯卡的代替像素中心功能可以解決虛線問題,但同時也會帶來其他不可預知的不穩定因素)
所以根據自己對三維呈現的實際展現要求可以靈活選擇優化設置的方法,目的只要一個就是要保證具有穩定、優良的性能又有很好的三維呈現效果。