【问题标题】:Multiple viewport with same model in wpfwpf中具有相同模型的多个视口
【发布时间】:2017-07-20 04:00:58
【问题描述】:

我引用了这个Rendering the same model in multiple WPF Viewports

我是 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,我以后会添加hittest。(这是一个合适的理由吗?)

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

otherMainModelVisual2.Content = mainModelVisual.Content;
otherMainModelVisual3.Content = mainModelVisual.Content;

Viewport2.Children.Add(otherMainModelVisual2);
Viewport3.Children.Add(otherMainModelVisual3);

viewport1会正常显示模型,但其他viewport没有显示任何东西。

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

我是初学者,希望有人能用简单的代码告诉我。

【问题讨论】:

    标签: c# wpf 3d


    【解决方案1】:

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

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

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

    您仅在第一个视口中看到模型的原因是 modelVisual1、modelVisual2 和 modelVisual3,它们都是 Visual3D 对象,已被指定为 ViewPort1 的(大)子级。将它们分配为不止一件事的孩子根本行不通。当您将它们指定为 mainModelVisual 的子级时,您将锁定它们在 Visual Tree 中的位置,直到您删除它们为止。

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

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

    【讨论】:

    • 感谢您的清晰解释!现在我将 Model3DGroup 共享到三个视口,它就可以工作了!
    猜你喜欢
    • 2013-04-18
    • 1970-01-01
    • 2016-03-11
    • 2020-12-23
    • 2011-08-05
    • 1970-01-01
    • 1970-01-01
    • 2014-12-18
    • 2022-06-21
    相关资源
    最近更新 更多