【问题标题】:Can anbody suggest me the way to voxelize 3d model?有人可以建议我体素化 3d 模型的方法吗?
【发布时间】:2015-10-29 20:30:20
【问题描述】:

这个网站解释了如何做到这一点。 http://drububu.com/miscellaneous/voxelizer/index.html 但我不明白如何在代码中实现它。

【问题讨论】:

  • 您可以尝试在 3D 中“光栅化”对象,方法是将其与平面相交并用立方体填充平面(很像光栅化三角形)
  • @willywonka_dailyblah 是不是就像用不同的平面切片对象并一次绘制一个部分并存储像素值来计算应该在哪里制作立方体?
  • 有点,是的。很快就会想出答案

标签: javascript 3d voxel voxels


【解决方案1】:

程序:

1) 指定两个 垂直方向来确定立方体的方向。为方便起见,我将分别选择它们作为 X 轴和 Z 轴。 X 为相交平面的法线,Y、Z 为平面内的二维坐标轴。

2) 找到包围网格的最小轴向长方体 (AABB)。我敢肯定这很容易。在这种情况下,这会给你 6 个数字,[X1, X2, Y1, Y2, Z1, Z2]。

3) 假设您选择具有维度 S 的立方体;令 H = S / 2。从 X X = X1 + H 开始,构造一个具有法线 (1, 0, 0) 和中心 (X, 0, 0) 的平面。

4) 与网格相交。有关 C++ 中的数学和实现的详细信息,请参见此处:http://www.geometrictools.com/Documentation/ClipMesh.pdf

5) 取交点产生的边。 将它们连接起来,方法是找到具有共同端点的对,并将它们插入到一些双向链表中。这样就可以将它们排序到路径中。

6) 找到这个形状的最小封闭矩形,给出 [Y1, Y2, Z1, Z2]

7) 从 Z = Z1 + H 开始,创建一条从 (X, Y1, Z) 到 (X, Y2, Z) 的线。将这条线与所有 路径中的边缘以获取点。沿着链接列表走,以避免重复测试。

8) 按 Y 坐标对点进行排序。插入排序即可:https://en.wikipedia.org/wiki/Insertion_sort

9) 对于相邻的点,Y 坐标为 A 和 B,从 Y = A + H 开始,在 (X, Y, Z) 处放置一个大小为 S 的立方体,其中 X和 Z 来自前面的步骤。

10) 从第 (9) 步开始重复对每一对点(如图所示),同时每次将 Y 递增 S,直到 Y > B - H。

11) 从步骤 (7) 开始重复,每次将 Z 增加 S,直到 Z > Z2 - H。

12) 从步骤 (3) 开始重复,每次将 X 增加 S,直到 X > X2 - H。

你就完成了。免责声明:这可能不是一种有效的方式,但它可能是最简单和最简单的实现方式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-15
    • 2017-06-08
    • 1970-01-01
    • 1970-01-01
    • 2022-08-15
    • 2021-02-14
    • 1970-01-01
    相关资源
    最近更新 更多