2016-11-11 15 views
0

我使用的Viewport3DX與許多不同的MeshGeometryModel3D元素。 用戶界面集成了一個滑塊,用於更新所有model3d元素的不透明度(alpha值爲PhongMaterials)。更新model3d元素的顏色的有效方法

這是我目前執行的代碼,更新不透明度:

geometryhandler.cs

public void UpdateOpacity(double value) 
    { 

     if (_mainWindow.MyBuildingComponents == null) return; 

     foreach (var component in _mainWindow.MyBuildingComponents) 
     { 

      // assign new material and later assign it back, to get the changes of the material recognized 
      var newmaterial = (_meshIdTogeometryModel3D[component.Id].Material as PhongMaterial).Clone(); 

      // create new DiffusColor because setting the alpha property directly is not possible 
      newmaterial.DiffuseColor = new Color4(newmaterial.DiffuseColor.Red, newmaterial.DiffuseColor.Green, newmaterial.DiffuseColor.Blue, (float)value); 

      _meshIdTogeometryModel3D[component.Id].Material = newmaterial; 

     } 

    } 

MainWindow.xaml.cs

private void UpdateOpacity(object sender, RoutedPropertyChangedEventArgs<double> e) 
    { 
     Geometryhandler?.UpdateOpacity(SliderModelOpacity.Value); 
    } 

每當滑塊值發生變化時,都會調用UpdateOpacity函數,迭代元素的字典並更新其材質。

我嘗試了很多不同的版本,但最終這是做這項工作的唯一實現。然而,即使在發佈模式下,更新速度也非常緩慢且「滯後」。

我認出了兩兩件事:

  • 我不得不克隆現有的材料,更新和分配回得到的材料在視口中改變

  • 我不能直接設置在Diffusecolor

人是否有一個想法,可能的瓶頸b是出阿爾法屬性,而是實例化一個新的顏色對象在這裏。是克隆材料,實例化新顏色還是兩者?或者完全不同的東西?有沒有更好的方法來做更新? 好奇聽到你的建議。非常感謝!

+0

您是否使用 「的ValueChanged」 事件觸發UpdateOpacity?您可能想要在用戶完成拖動滑塊時只考慮更新不透明度:https://social.msdn.microsoft.com/Forums/vstudio/en-US/d8b9c195-12b9-45f5-8880-94cb05aefdee/slider -event換下場,滑動的?論壇= WPF。我唯一的建議是嘗試將具有相同基色的元素組合/組合在一起,因此不透明度更新需要更少的材料更改。 – Michael

+0

我實際上使用「ValueChanged」事件,這是一個整潔的想法,我會試試這個。對同樣的彩色元素進行分組和緩存,也是我腦海中浮現出來的東西,但遺憾的是我不能解決這個問題。謝謝你的回答Michael! – Daniel

+0

MSDN有一個體面的指南來改善一般WPF圖形性能,也許這些建議中的一些可能也有幫助:https://msdn.microsoft.com/en-us/library/bb613553.aspx – Michael

回答

1

我要在這裏引用我的評論,所以我們可以關閉這個問題。

您是否使用「ValueChanged」事件觸發UpdateOpacity?您可能想在用戶完成拖動滑塊時只考慮更新不透明度:social.msdn.microsoft.com/Forums/vstudio/en-US/...。我唯一的建議是嘗試將具有相同基色的元素組合/組合在一起,因此不透明度更新需要更少的材料更改。

...

msdn.microsoft.com/en-us/library/bb613553.aspx