最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

13.Mesh切割原理分析

2023-05-03 01:25 作者:機(jī)智的小草yns  | 我要投稿

對(duì)ezy-slice源碼的分析

參考:

https://github.com/DavidArayan/ezy-slice

https://blog.csdn.net/llsansun/article/details/114984084


下頭瓜

Mesh切割需要解決哪幾個(gè)問(wèn)題?

1.如何確定一個(gè)平面?

2.如何判斷點(diǎn)在平面的上方 還是下方?

3.如何確定三角面與切面的交點(diǎn)?

4.切割后新的面是什么?


1.如何確定一個(gè)平面?

法線向量norm + 原點(diǎn)到面的距離 dist = |OX| (與法線向量同向?yàn)檎?br>

法線向量垂直于平面, 法線向量相同的面互相平行

1.法線向量+平面上的一個(gè)點(diǎn)P

法線norm已知, 求原點(diǎn)到面的距離


Dot公式

原點(diǎn)到面的距離 =? OP在法線上的投影

由于norm長(zhǎng)度為1, 在公式中直接化簡(jiǎn)掉了。

m_dist =? |OP| *? cosθ = norm * OP


2,平面上的三個(gè)點(diǎn) (不共線)

三個(gè)點(diǎn)->兩個(gè)向量ab, ac

ab叉乘ab->面的法線向量???

再由其中一個(gè)點(diǎn) 和 法線 得出距離

2.如何判斷點(diǎn)P在平面的上方 還是下方?

計(jì)算OP法線上的投影 = dp =?Vector3.Dot(m_normal, pt)

如果dp > dist ,在上方,反之在下方

Epsilon 為0.0001, 如果兩者相差不超過(guò)Epsilon,則判定點(diǎn)在面上。

3.如何確定三角面與切面的交點(diǎn)?

先將問(wèn)題分解為, 如何確定AB線段與平面的交點(diǎn)x

計(jì)算出AX和AB的比例即可推出點(diǎn)X

|AB'| = 向量BA法線上的投影 (后面簡(jiǎn)稱投影)

? ? ? ?=? Vector3.Dot(normal, BA) =? - Vector3.Dot(normal, AB)

|AX'|= XA投影 = OA投影 - OX投影

=? Vector3.Dot(normal, OA)) - ?Vector3.Dot(normal, OX))

=? Vector3.Dot(normal, OA) - m_dist


t = |AX'| /|AB'| =? (Vector3.Dot(normal, OA) - m_dist)? / (- Vector3.Dot(normal, AB))

?=? (m_dist - Vector3.Dot(normal, OA) ) / Vector3.Dot(normal, AB)

以上是BA與法線同向的情況, 如果是反向的情況, |AX'| |AB'|兩個(gè)值同時(shí)取反, 則剛好抵消

計(jì)算切點(diǎn)q的代碼 :


切割后新的面?

得知三角面的切點(diǎn)后, 便可以將mesh分為上下兩個(gè)部分.

切割分兩種大情況 , 一是切割兩條邊, 二是只切割一條邊

兩條邊: 可以是a+b,b+c,c+a , 有3種情況

一條邊: 可以是a,b,c ,? 也有3種情況

所以一共是有6種情況

見(jiàn)ezy-slice源碼的Intersect.Intersect()

先是獲取三個(gè)點(diǎn)與平面的位置關(guān)系

進(jìn)行各種情況的窮舉

排除三個(gè)點(diǎn)同方位的情況

排除兩個(gè)點(diǎn)都處于ON的情況

排除一點(diǎn)在ON,其他兩點(diǎn)同方位的情況

切割一條邊的情況

切割兩條邊的情況


其他

使用ezy-slice切割的示例


UV的部分還過(guò)于復(fù)雜...



13.Mesh切割原理分析的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
全椒县| 定西市| 全椒县| 乐业县| 松潘县| 丹棱县| 即墨市| 浦江县| 朝阳县| 突泉县| 靖州| 子长县| 清远市| 凤阳县| 华宁县| 汉寿县| 长乐市| 图片| 梁河县| 东山县| 景宁| 渝中区| 松阳县| 巴青县| 宁河县| 于都县| 桃园市| 阜康市| 青浦区| 吴堡县| 杭锦后旗| 临漳县| 墨脱县| 宁乡县| 修武县| 柏乡县| 治县。| 城步| 厦门市| 思南县| 江口县|