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

2021-07-11 07:04:10 字數 1667 閱讀 9426

專案需要,要在人頭上把頭髮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()

用陣列去模擬棧

用資料模擬棧,在一定的程度上提高了效率。但浪費了一些空間。下面我附上 include include define emptytos 1 define minstacksize 5 struct stackrecord typedef struct stackrecord stack struct ...

UML核心模型 用例模型

學uml就是為了建模,uml的語法和詞彙已經差不多了解了。所以開始學模型了。用例模型是需求工作的結果,用例模型有業務用例模型,概念用例模型和系統用例模型。他們擁有軟體開發的不同生命週期階段,它們三者是在不同的抽象層次上的,它們之間是一種精化關係。業務用例模型 業務用例模型位於統一過程的先啟階段。從業...

用一生去忘記

友情和愛情 服務員把兔子領到乙個靠窗的座位,蘇光夏手握一杯熱茶,正在那裡等她。兔子發現蘇光夏平靜的背後有著隱隱的憂傷,經過一段短暫的沉默,兔子突然說道,你跟餘橙的關係出問題了吧。我倆結束了。他說。怎麼會呢?不要告訴我是她愛上了有錢人。蘇光夏道,如果是那樣我反而不難受了。兔子說那到底是為什麼呢?蘇光夏...