我使用VS 2008 C#Express。 我想在包含很多3D對象的窗口中更改3D對象的不透明度值。 更改過程將由代碼隱藏完成。如何更改3D對象的不透明度值
你能解釋一下它是如何完成的。
感謝
B.Joe
我使用VS 2008 C#Express。 我想在包含很多3D對象的窗口中更改3D對象的不透明度值。 更改過程將由代碼隱藏完成。如何更改3D對象的不透明度值
你能解釋一下它是如何完成的。
感謝
B.Joe
你可以操縱材料的不透明性在它包含刷的條款。
這是正確的想法。您必須確保操作Material和BackMaterial,並處理更新實際材料。我添加了一個顯示如何執行此操作的答案。 – 2010-06-04 23:04:29
假設你的3D對象是內ModelVisual3D
或ModelUIElement3D
一個Model3DGroup
或GeometryModel3D
,改變不透明度爲在它遍歷各個GeometryModel3D
S和更新每個人的Material
和BackMaterial
,東西沿着這些路線的問題:
public void SetOpacity(Model3D model, double opacity)
{
var modelGroup = model as Model3DGroup;
var geoModel = model as GeometryModel3D;
if(modelGroup!=null)
foreach(var submodel in modelGroup.Children)
SetOpacity(submodel, opacity);
if(geoModel!=null)
{
geoModel.Material = SetOpacity(geoModel.Material, opacity);
geoModel.BackMaterial = SetOpacity(geoModel.BackMaterial, opacity);
}
}
public Brush SetOpacity(Brush brush, double opacity)
{
if(!GetIsOpacityControlBrush(brush)) // Use attached property to mark brush
{
brush = new VisualBrush
{
Visual = new Rectangle { Fill = brush, ... };
};
SetIsOpacityControlBrush(brush, true);
}
((Rectangle)((VisualBrush)brush).Visual).Opacity = opacity;
}
您將需要遍歷對象中的所有GeometryModel3D和ViewPort2DVisual3D。對於每個GeometryModel3D,將材質更新爲新的不透明度,如有必要,使用VisualBrush。對於每個ViewPort2DVisual3D,只需設置不透明度
如果你的3D對象是的Visual3D如ContainerUIElement3D,那麼你必須先迭代細分到個人ModelVisual3D和ModelUIElement3D去,包括它的模型。此外,如果您遇到ViewPort2DVisual3D,則可以直接在包含的Visual上設置不透明度。
您使用的是WPF嗎? 3D對象究竟是什麼? – SLaks 2010-02-23 21:47:33
另外,您可以發佈描述您試圖使對象不透明的代碼嗎?我想像一下3D對象本身可能存在一個「不透明」屬性。 – CrimsonX 2010-02-23 21:57:50