首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XNA检查三维点是否在模型内(fbx)

XNA检查三维点是否在模型内(fbx)
EN

Stack Overflow用户
提问于 2013-01-24 00:55:57
回答 3查看 1.3K关注 0票数 0

我和我的朋友们正在开发3D打印机。完成了包括微控制器编程在内的硬件部分的设计。现在我们要分析现有的3D模型。这包括一种检查特定坐标( 3D )是在我们想要打印的3D模型(FBX模型)内部还是外部的方法。目前我们关注的是Unity3D和XNA。我知道了如何处理边界框,但这不是解决XNA问题的聪明方法。所以我的问题是,有没有什么聪明的方法来获取这些信息。

非常感谢您的支持;-)

EN

回答 3

Stack Overflow用户

发布于 2013-01-24 01:53:36

算法

您正在寻找一种方法来确定一个点是否位于凹面外壳内。这可以通过将Point in Polygon算法扩展到三维来实现。

其思想是通过该点投射光线,并计算与体积的外壳(多边形)的交点。如果点任一侧的射线三角形交点的数量为奇数,则该点位于体积内。

如果性能有问题,简化的边界体积仍然很有用。如果计算光线-多边形交点的代价很高,则应首先检查该点是否位于网格的近似外壳内,该外壳具有较低的性能成本(例如边界框、凸面外壳)。这样你就可以提早丢弃积分。

下面是点在多边形算法的另一个详细解释和一个C语言实现:

  • Determining Whether A Point Is Inside A Complex Polygon

选择正确的编程环境

我不知道你为什么要使用XNA甚至Unity来完成这项任务。当然,两者都提供了加载3D模型的能力,但肯定还有更简单、更高效的替代方案。

对于上述算法,您只需访问模型的顶点位置和三角形定义,仅此而已。如果FBX不是必需的,我建议研究一下Wavefront OBJ文件格式。它是一种基于文本的格式,易于理解/解析,几乎所有专业的3D建模应用程序都支持它。

  • Wavefront OBJ specification
  • OBJ file examples

如果需要FBX,您仍然可以尝试自己解析它们,或者只使用现有的3D转换器。

票数 1
EN

Stack Overflow用户

发布于 2013-02-11 22:16:06

我会使用体素来完成这样的任务。你的3D打印机在所有轴上都有一些分辨率,所以你可以假设你的体素空间有类似的分辨率。将体素场值转换为打印机运动将相对容易,因此最困难的事情是将网格转换为体素。我相信你可以找到一些库来解决这个问题。

你可以从这里开始:Know any voxel graphics C++ libraries?

票数 0
EN

Stack Overflow用户

发布于 2013-03-20 02:54:04

一个非常快速的解决方案(绝对不需要数学)来测试一个点是否在实体(封闭的曲面集合)内是使用3D游戏引擎,正如你已经猜测的那样。正如卢修斯所指出的,这有点像是用起重机压死一只苍蝇。但是,它只需要很少的努力就可以工作。

为了证实这一点,我在使用Panda3D之前已经这样做了(如果可以使用任何3D引擎,我也不会感到惊讶)。

碰撞检测才是有用的。正如卢修斯所指出的,你想要检测表面。所以,使用熊猫所谓的"RayCollider“(基本上是一条线),看看它与3D模型的表面相交了多少次。Panda已经有了做这件事的帮助器函数,并且有很多使用RayColliders检测表面的完整代码示例,当你下载SDK的时候。

然后,简单地迭代所有x,y,z空间,并使用panda辅助函数来移动光线的原点。如果它与奇数个表面发生碰撞-你就在里面。否则,你就在外面了。

与Panda3D的完整代码示例相比,这项任务实际上相当微不足道。学习曲线主要花在熟悉引擎而不是数学上。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14485096

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档