2016-11-11 52 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

相关问题