在 wpf 中具有相同模型的多个视口

  • 本文关键字:模型 视口 wpf c# wpf 3d
  • 更新时间 :
  • 英文 :


>我从这里引用了在多个 WPF 视口中渲染相同的模型

我是 wpf 初学者,对该链接有类似的问题。我想展示三个模型,它们会相对移动,并在具有不同相机设置的不同视口中显示。

起初,我尝试将ModelVisual3D添加到不同的视口,但显然不起作用。

所以我尝试在下面执行此操作,这是代码:

Model3DGroup model1 = read(path1);
Model3DGroup model2 = read(path2);
Model3DGroup model3 = read(path3);
modelVisual1.Content = model1 ;
modelVisual2.Content = model2 ;
modelVisual3.Content = model3 ;
mainModelVisual.Children.Add(modelVisual1);
mainModelVisual.Children.Add(modelVisual2);
mainModelVisual.Children.Add(modelVisual3);
Viewport1.Children.Add(mainModelVisual);

我不只使用一个 Model3DGroup 的原因是我分配了不同的Transform3D,我将在未来添加最热门的。(这是一个合适的理由吗?

现在我想像这样将模型添加到不同的视口:

otherMainModelVisual2.Content = mainModelVisual.Content;
otherMainModelVisual3.Content = mainModelVisual.Content;
Viewport2.Children.Add(otherMainModelVisual2);
Viewport3.Children.Add(otherMainModelVisual3);

视口1 将正常显示模型,但其他视口未显示任何内容。

问题是为什么我不能像链接一样这样做? 还是我必须复制两个模型并添加到不同的模型视觉,如视口1

我是初学者,希望任何人都可以用简单的代码向我展示。

如您引用的问题代码中的第一条注释中所述,每个Viewport3D都必须有自己的ModelVisual3D。但是,更清楚的是:

在WPF中,一个Visual(包括Visual3D(只能存在于可视化树中的一个位置。换句话说,一个Visual只能有一个父母。你的窗口(或其他任何东西(是树的根。所以你会有这样的东西:

Window
|
|--Grid
|
|--ViewPort1
|
|--mainModelVisual
|
|--modelVisual1
|--modelVisual2
|--modelVisual3
|
|--ViewPort2
|--ViewPort3

您只在第一个视口中看到模型的原因是 modelVisual1、modelVisual2 和 modelVisual3(都是Visual3D对象(已被指定为 viewPort1 的(大(子项。将它们指定为多个事物的子项根本行不通。当您将它们指定为 mainModelVisual 的子级时,您将锁定它们在可视化树中的位置,直到您删除它们为止。

但请注意,模型 1、模型 2 和模型 3 元素未显示在树上。这是因为它们不是Visual3D对象,而是ModelGroup3D对象,这是一种内容,本质上是指导视觉对象如何绘制自己的数据。您可以根据需要将模型分配给任意数量的ModelVisual3D对象。这就是链接问题中发生的事情。同一内容被多次使用,但每个ViewPort3D都有一组分配给它的唯一Visual对象。

例如,如果您创建了一个Button并尝试将其添加到两个不同的StackPanel对象,则会遇到同样的问题。只有一个StackPanel会呈现按钮。不过,您可以创建两个不同的按钮,它们都可以具有相同的文本,由相同的string变量分配。

最新更新