- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在编写一个游戏,它使用 3D 模型绘制场景(自上而下的正交投影),但使用 2D 物理引擎来计算对碰撞的响应等。我有一些我想要的 3D Assets 能够通过使用 X-Y 平面“切片”3D 网格并从结果边缘创建多边形来自动生成碰撞框。
谷歌在这方面让我失望(而且在 SO 方面也没有太多有用的 Material )。有什么建议吗?
我正在处理的网格将是所显示模型的简化版本,它们是连通的、封闭的、非凸的并且具有零亏格。
最佳答案
由于您的网格不是凸面的,因此生成的横截面可能会断开连接,因此实际上由多个多边形组成。这意味着必须检查每个三角形,因此对于 n 个三角形,您至少需要 O(n) 次操作。
这是一种方法:
T <- the set of all triangles
P <- {}
while T is not empty:
t <- some element from T
remove t from T
if t intersects the plane:
l <- the line segment that is the intersection between t and the plane
p <- [l]
s <- l.start
while l.end is not s:
t <- the triangle neighbouring t on the edge that generated l.end
remove t from T
l <- the line segment that is the intersection between t and the plane
append l to p
add p to P
对于 n 个三角形,这将在 O(n) 时间内运行,前提是您的三角形具有指向其三个邻居的指针,并且 T
支持恒定时间删除(例如哈希集)。
与所有几何算法一样,细节决定成败。例如,仔细考虑三角形的顶点恰好在平面内的情况。
关于algorithm - 从 3D 网格生成 2D 横截面多边形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2797431/
如果您有 Mathematica 并输入: ParametricPlot3D[{Sin[u], Sin[v], Sin[u + v]}, {u, 0, 2 Pi}, {v, 0, 2 Pi] 您将生成
我有一个 polychoron表示为四维网格,用面顶点法存储。所有的面都是三角形。如何得到图形的三维截面? 我找到的最接近的是 this question , 但它是一维短。 最佳答案 处理 4 个维
到目前为止,我已经阅读了以下有关计算 4D 对象的 3D 相交点的内容: Simple implementation of 4D cross-section How do I get a 3D cro
我正在尝试制作 OBJ 的横截面加载了 three.js OBJ loader使用 threeCSG JavaScript 的包装器 constructive solid geometry图书馆。 当
我是一名优秀的程序员,十分优秀!