2010-05-19 69 views
0

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

我发现的所有细分算法只能将网格细分为2的精确幂。有人知道一个可以做我想要的吗?

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

使用C#如果这有什么区别。

+0

我觉得很难想象一个由4点定义的网格。你能澄清一下吗?也许你的意思是说,你有一个由四点定义的四边形,并且你想创建一个细分四边形的网格?现有网格的特征是什么 - 统一的,矩形的等等?和所需的输出网格?顺便说一下,我不认为将问题转化为2D是一个坏主意。 – 2010-05-19 15:43:10

+0

对不起,是的。你可以认为它只是一个四边形。它使用两个三角形进行渲染,但这并不重要。由于它由4个点定义,它将始终是一个矩形。本质上,它代表了一个地板,我想将地板分成规则大小的瓷砖。 – Grokys 2010-05-19 16:35:17

+0

四点共面吗?你提到一个矩形:这是否意味着角度是直的? – Aniko 2010-05-19 17:23:19

回答

2

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

现在,您可以生成所有内部点。假设你想沿着第一边缘条边,和N沿第二,那么内部点只是

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

其中ij分别0 .. M-10 .. N-1,走了。你可以通过在纸上做出来找出哪些顶点需要连接在一起。

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

如果你想细分一个普通的网格,你可以对每个单独的三角形/四边形做这个。由于所有原始平面保持平坦,这种均匀细分导致质量差的网格。如果你想要更复杂的东西,你可以看看Loop subidivision,Catmull-Clark等等。它们通常受限于两个功率级别,但是如果你研究原始公式,我认为你可以得到细分模板,两个权力部门。背后的理论比我在这里可以合理描述的要多一点。

0

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

关闭我的头顶我猜想从3D转换到2D(并且同时将矩形与坐标轴对齐),然后计算网格点,然后转换回到3D可能很简单(而且耗费CPU时间),因为首先就是将它全部用于3D。

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

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

+0

不,你没有错过我的观点。我只是想知道是否有任何现有的算法可以做到这一点。有很多细分算法,人们花了很多时间。你是对的;在2D中它是微不足道的,在3D中数学更难,而且在3D数学方面人们比我更好:) – Grokys 2010-05-19 18:43:38