【问题标题】:XNA, subtract 2 meshes at runtime?XNA,在运行时减去 2 个网格?
【发布时间】:2010-06-10 06:46:17
【问题描述】:

我想知道如何在运行时在 XNA 中编辑 3d 模型的顶点,我想做一些类似 3d max 减法的功能,你将 2 个模型放在一起并删除其中 1 个的相交顶点,更像是雕刻一个网格和另一个。

如果我不清楚,请参阅this

无论如何,任何关于如何在运行时编辑顶点的指针或任何帮助都非常感谢。

谢谢

【问题讨论】:

    标签: c# xna


    【解决方案1】:

    你不能那样做。

    AFAIK、OpenGL、DirectX 和 XNA 没有用于对三角网格进行布尔运算的实用函数(如果它们有这些,我们将在市场上的每款游戏中看到完全可破坏的环境)。如果你想这样做,你必须自己实现布尔运算。这将是非常困难的(尤其是处理拓扑),我的意思是(试图这样做,当我有更多时间时,有一天(作为练习)会实施它们)。

    或者您可以尝试改编/使用来自blenderlibgts 的源代码。它们都实现了布尔运算,但它们是用 C/C++ 编写的,而不是用 C# 编写的,所以无论你怎么看都会很“有趣”。此外,如果您决定使用他们的代码,请注意许可证。两者都使用 GPL 的风格,而 GPL 是“病毒”许可证。

    【讨论】:

    • 真的好吗?谈论复杂性!我发现这个forums.xna.com/forums/t/16614.aspx 它有一些现成的代码,但我对算法更感兴趣,这是我在提到已发表论文的回复中发现的...inf.usi.ch/hormann/papers/Greiner.1998.ECO.pdf 看起来不错,这将是超级有趣的/跨度>
    • @OSaad:如你所愿。这非常困难,不要说我没有警告过你。它可以完成,但这是一个复杂的过程,有很多地方你可以很容易地搞砸一切。布尔运算的基本原理非常简单:A - B 等于 A 在 B 之外的边加上在 A 内的 B 的倒边。这很简单。当您开始切割几何体,发现您需要三角剖分,并意识到标准 DirectX 网格没有足够的信息时,就会出现问题,这意味着您必须生成它并重新计算它。跨度>
    • @OSaad:实时布尔运算是在 Red Faction 1 的 GeoMod 引擎中完成的(Guerialla 使用完全不同的技术),但它在基元(球体/立方体 - CSG)上运行,而不是在三角形上运行。如果我没记错的话,为程序员开发这项技术大约需要 6 个月的时间。三角网格上的布尔值是在实时 3D 中实现的最复杂的东西(我所知道的)。在尝试进行真正的布尔运算之前,请尝试使用平面切割具有多种材料的简单索引网格,并用多边形盖住孔。当你能做到这一点时 - 你有资格尝试真正的布尔值。
    • @OSaad: “现成的代码” 哦,在我忘记之前......将一个多边形切割另一个多边形非常简单,您应该真的可以自己做。切割整个模型不是——还有许多其他问题需要处理。
    猜你喜欢
    • 2016-11-17
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-04
    相关资源
    最近更新 更多