用polygon模型去切CV曲线的工具

项目需要,要在人头上把头发CV曲线多余的部分切掉,所以需要开发一个用polygon模型去切CV曲线的工具。


可以通过Polygon -> Subdiv模型,然后用Sbudiv模型去切曲线,这个在maya里已经集成了。


我用纯数学的方法写了一个。


大体思路:

1,找到每根曲线上和polygon相交的是哪个面

2,近似的把CV曲线看成是每2个相邻CV点的线段组成的,然后找到和polygon相交的是哪2个CV点

3,在这2个CV点之间做折半查找,直到找到的点到平面的距离小于一个阈值。

由于工具演示效果不够震撼,所以就不放视频了,放截图吧。


准备工作:



切后:


这几根曲线用了不到0.1秒。


现在挑战高难度:

40根CV曲线


用时 0.28秒

结果如下:



挑战400根

用时 2.2S

如图:



效果如下:




后记:

其实就是一些空间直线和平面的方程组求解,不过程序有一个小问题,如果CV曲线上的点不够多,即CV曲线不够平滑,结果可能会出现错误,原因是,我实在是找不到Maya里面3个knot的CV曲线的实际点坐标,如图:



如果哪位大神指导,望不吝赐教啊!!!




补记:

今天群里军神问了这个问题,另外一位大神给出了maya的解决方案:


import maya.cmds as mc
import maya.mel as mel


def cut_curve():
    sels = mc.ls(sl=True)
    mesh = sels[-1]
    for sel in sels[:-1]:
        try:
            cur = mc.polyProjectCurve(sel, mesh, ch=0, pointsOnEdges=1, curveSamples=50, automatic=1)[0]
            cur_chr = mc.listRelatives(cur, c=True)[0]
            mc.arclen(cur_chr, ch=True)
            mc.select([sel, cur])
            mel.eval('cutCurvePreset(1,1,0.01,6,0,1,0,2,2)')
            mc.delete(cur)
        except: 
            pass
cut_curve()


猜你喜欢

转载自blog.csdn.net/xdhstc/article/details/51183009