3D模型作为WPF中的控件

时间:2011-05-26 22:02:15

标签: wpf 3d wpf-controls

在我最近的疯狂项目中,我正在尝试为类似3D策略的游戏创建视图。它是3D,因此视图的主要部分是Viewport3D。其中,单位有几个Model3Ds。问题是,我想以交互方式使用3D视图(例如通过逐个点击选择单位),所以我将模型包裹在ContainerUIElement3Ds中。起初我的视图中只有少数模型,但后来可能会有更多,所以我不想将它们硬编码到视图中。我的第一个方法是创建一个Control来保存一个模型并处理它上面的交互,但是这个计划似乎失败了,因为ContainerUIElement3D是一个密封的类,Model3D无法捕获我需要的事件。

那么我怎么能解决这个问题?

2 个答案:

答案 0 :(得分:0)

我可以想到两种一般方法:

  1. 使用3D中的真实互动元素
  2. 使用简单的图形元素进行命中测试
  3. 这两种方法都有价值,如果满足您的需求,这取决于您。

    只是要知道可以使用真正的交互元素作为一种先进的技术,是有价值的信息。以下是您对该领域研究的起点:

    这篇文章描述了一个ItemsControl,但你要求的更进一步。这些概念对您来说很重要,您可以在该网站上找到其他文章链接。

    对图形元素进行命中测试并自己渲染所有交互性的蛮力方法可能听起来令人生畏,但对于游戏,您通常需要完全控制元素。您可能有自己的计划,用抽象的颜色或光晕渲染选定的项目等。

    有基础设施,比如按钮,并不复杂,您可以使用直接使用矩形或立方体的几个代码实现点击和鼠标处理。如果这种“自己动手”的方法听起来不错,那么你需要的只是3D命中测试。这是一篇可以帮助您入门的文章:

答案 1 :(得分:0)

WPF 3D不适用于复杂的游戏。 但... 有两种方式(如Rick Sladkey所注意到的)可以获得互动行为:

  1. 继承自UIElement3D - 完全支持互动
  2. 继承自ModelVisual3D - 使用VisualTreeHelper(例如命中测试)
  3. 所以,你的单位是这个类的实例(第1或第2页) 这笔交易是您单位的3D复杂性。 如果他们有简单的网格而不是那么坚硬的材料,你会感到自由,单位数量达到1000-2000甚至更多。

    enter image description here

    简单的材质,轻量级网格,并继承自UIElement3D。 但是如果我们改变材料,场景就会变得enter image description here ......

    意见

    继承自UIElement3D

    建议

    如果可能,请不要使用3方库,手动在代码中编写3D对象。原因是其中一些在性能方面不正确。