将3D网格划分为任意大小的块

时间:2010-05-19 14:32:10

标签: c# algorithm math 3d

我在3D空间中有4个点定义的网格。我需要一种算法,将该网格细分为任意水平和垂直大小的细分。如果细分尺寸不是网格尺寸的精确除数,则边缘部分将更小。

我发现的所有细分算法都只将网格细分为2的精确幂。有没有人知道可以做我想做的事情?

如果做不到这一点,我对可能实现的想法是旋转网格,使其在Z轴上平坦,细分为2D,然后转换回3D。那是因为我的头脑很难找到3D;)有什么更好的建议吗?

如果有任何不同,请使用C#。

2 个答案:

答案 0 :(得分:2)

如果你只需要处理3D中的矩形,那么你只需要获得两个边缘矢量,然后就可以生成细分矩形的所有内部点。例如,假设您的四边形由(x0,y0),...,(x3,y3)定义,以绕过四边形。相对于点(x0,y0)的边矢量是u = (x1-x0,y1-y0)v = (x3-x0,y3-y0)

现在,您可以生成所有内部点。假设您希望第一条边沿有M条边,第二条边需要N条,那么内部点只是

(x0,y0) + i/(M -1)* u + j/(N-1) * v

其中ij分别来自0 .. M-10 .. N-1。您可以通过在纸上进行处理来确定哪些顶点需要连接在一起。

这种均匀细分也适用于三角网格,但每条边必须具有相同数量的细分边。

如果要细分一般网格,可以对每个单独的三角形/四边形进行细分。由于所有原始平面保持平坦,因此这种均匀细分导致质量差的网格。如果你想要更复杂的东西,你可以看看Loop subidivision,Catmull-Clark等。这些通常被限制在两个级别的力量,但如果你研究原始的配方,我认为你可以得到非细分模板两个部门的权力。这背后的理论比我在这里可以合理描述的更为复杂。

答案 1 :(得分:0)

现在你已经更清楚地解释了一些事情,我没有看到你的问题:你有一个矩形,你想把它分成矩形瓷砖。因此,您想要的网格点在两个正交方向上有规律地间隔开。在2D中,这肯定是微不足道的?在3D中,尽管数学有点棘手,但它也是微不足道的。

在我的脑海中,我猜想从3D转换为2D(并同时将矩形与坐标轴对齐)然后计算网格点,然后转换回3D可能就是这么简单(和耗费CPU时间)首先在3D中完成全部工作。

是的,使用C#意味着我无法提出代码来帮助您。

如果我错过了这一点,请评论或编辑您的问题。