>我从这里引用了在多个 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
变量分配。