在两组点之间创建网格的算法

时间:2014-03-11 02:04:36

标签: graphics 3d mesh

是否有算法在两个3D点列表之间创建网格,每个列表形成一个完整的循环?

Example Image

在链接图像中,红点是第一组,蓝色是第二组,灰色是连接两组的三角形所需的输出,填补了它们之间的空隙。

这个image显示我想要在3d中完成的工作,紫色点形成第一个地形的轮廓,其他点形成第二个地形中的洞的轮廓,算法应该创建一个网格填充内外轮廓之间的空隙。

2 个答案:

答案 0 :(得分:1)

您可以验证以下方法是否有效吗?基本思路是,当您绕着内部节点循环时,您将获得距离外部节点最近的节点并添加边缘。外环上最近的应该是已经设置的那个,或者它的一个邻居。所以你可以利用它,如下:

innernode = firstnode(innerloop)
outernode = NULL

while(innernode) do

    if(outernode) then
        //For every new node, check if the outer node is the nearest, 
        //or if any of its neighbours are
        newouternode = find_nearest_among(outernode, prev(outernode), 
                                            next(outernode), innernode)
        if(newouternode != outernode) then
            //If we found a new node, add an extra edge, 
            //otherwise, we'll have quads
            //The figure shows why this is needed.
            make_edge(innernode, outernode)
            outernode = newouternode 
        end
    else
        //the first time, find the closest node in the outer loop)
        outernode = find_nearest(outerloop, innernode)
    end
    //continue making an edge to the outernode, we're closest to
    make_edge(innernode, outernode)

    //move on
    innernode = next(innernode)
end

enter image description here

答案 1 :(得分:0)

输入是两个点循环,这样一个循环就在其他循环中。

想法是通过在相同方向上遍历循环来连接点(并行)。在外部循环中找到一个点,在内部循环中找到一个点,使得连接它们的段不与任何循环相交。有两种可能性可以移动到下一个段,在内环上移动点或在外环上移动点。测试这两个段是否与循环交叉,以及(如果需要)由最后一个段和下一个段生成的三角形质量,并确定要使用的下一个段。重复移动线段,直到整点返回初始线段。