專案需要,要在人頭上把頭髮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的語法和詞彙已經差不多了解了。所以開始學模型了。用例模型是需求工作的結果,用例模型有業務用例模型,概念用例模型和系統用例模型。他們擁有軟體開發的不同生命週期階段,它們三者是在不同的抽象層次上的,它們之間是一種精化關係。業務用例模型 業務用例模型位於統一過程的先啟階段。從業...
用一生去忘記
友情和愛情 服務員把兔子領到乙個靠窗的座位,蘇光夏手握一杯熱茶,正在那裡等她。兔子發現蘇光夏平靜的背後有著隱隱的憂傷,經過一段短暫的沉默,兔子突然說道,你跟餘橙的關係出問題了吧。我倆結束了。他說。怎麼會呢?不要告訴我是她愛上了有錢人。蘇光夏道,如果是那樣我反而不難受了。兔子說那到底是為什麼呢?蘇光夏...