• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            月下的博客

              C++博客 :: 首頁 :: 聯系 :: 聚合  :: 管理
              34 Posts :: 0 Stories :: 59 Comments :: 0 Trackbacks

            常用鏈接

            留言簿(5)

            我參與的團隊

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

               這兩天在準備面試,然后復習了下數學的東西,好多東西以前基礎不好,就是走馬觀花的看一下,過了一段時間立馬就忘記了,索性記下來的好。這里的3D空間都是右手坐標系,向量為列為主
            一,法線變換乘WorldView矩陣的逆的轉置
            肯定不是直接乘worldView矩陣了,推導其實很簡單,(像我這樣腦子不行的只能看完了感慨了)設原mesh上一個頂點為v,其法線為n,WorldViewMatrix為Mwv,那么在object space里,滿足v dot n == 0,以此我們可以換個形式表示,也就是(v)T * n == 0, (1x4和4x1的矩陣相乘實際就是點乘了),那么在變換之后,設變化后的頂點為v',變換后的法線為n',那么同樣也需要滿足這個條件,
            (v')T * n' == 0, 而v' = Mwv * v,
            代入=> (Mwv * v)T * n' == 0 =>  vT * MwvT * n'  == 0,  而n'等于Mn * n(我們要求的),
            =>vT * (MwvT * Mn )* n == 0 ,而(v)T * n == 0, 那么中間的(MwvT * Mn )== I => Mn = (MwvT)-1,而因為方陣(當然得有逆的情況。。)的逆的轉置等于轉置的逆,所以就能證明出來咯~。我剛想了下,應該行為主的結果也是一樣的,這里錯了話,望糾正。


            二,判斷點是否在三角形內準備筆試的時候正好看到這道題,以前在ogre代碼里也看到過,但原理沒深究過,google中文搜了下,貌似沒什么講的很好的,英文一搜就搜到了很多非常詳細的。這里就做個整理吧,省得和我一樣的搜兩次了~~。設三角形ABC,點為P,(向量我就寫成行形式了~)
            1,面積法,基本上是最直接低效的,點P如果在三角形內,則分割的三個三角形面積和等于ABC面積,這個不說了。
            2,網上最常見的,所謂的2D叉乘法,實際上叉乘是不存在于2D空間的,只存在于3D和7D(!。。這個沒細看。反正wiki還是哪里看到的),但2D空間里我們可以用一點小技巧,就是假設一個垂直于xy平面的z軸,那么2D平面的z值則一直為0,設 向量B-A為V1(x1,y1,z1),向量P-A為V2(x2,y2,z2),根據3D叉乘公式,(x1,y1,z1)  X (x2,y2,z2) = (y1z2 - y2z1, x1z2-x2z1, x1y2-x2y1),由于z為0,那么x,y則為0,所以實際2d叉乘值就是z值,其實我們得到的還是一個向量,它垂直于我們2d空間的xy平面,不管是順時針還是逆時針,我們只要按一個方向同樣再對另外兩邊做同樣的叉乘,只要得到的這三個值符號一致,這就說明點P在三角形三邊的同一側,也就是在三角形內了,其實再想想,只需要確定在兩條邊的同側,那么就是在三角形內了。
            3,重心法,從二維空間上看,我們可以把p當乘以以三角形一個頂點的兩條邊向量乘以兩個標量權重的和,設這兩個權重為u,v,只要u,v大于0,且和小于1,那么P就在三角形內,所以我們下來就是求出u,v了:
            =>P = A +  u * (C - A)+ v * (B - A), u,v這也就是三角形的重心坐標系坐標,這就是個二元一次方程,這里我們化簡下,設P-A為v2, C - A為v0,B - A為v1,
             =>v2 = u * v0 + v*v1, 乘v0,v1我們就能得到兩個方程
            =>v2 * v0 = (u * v0 + v*v1)* v0, (1)
                v2 * v1 = (u * v0 + v*v1)* v1, (2)
            略化簡。。
            =>u = ((v1 * v1)(v2 * v0) - (v1 * v0)(v2 * v1))/(((v0 * v0)(v1 * v1) - (v0 * v1)(v1 * v0))
            v = ((v0 * v0)(v2 * v1) - (v0 * v1)(v2 * v0))/(((v0 * v0)(v1 * v1) - (v0 * v1)(v1 * v0))
            posted on 2011-04-03 20:26 月下圓舞曲 閱讀(491) 評論(0)  編輯 收藏 引用 所屬分類: 開發
            久久精品人人槡人妻人人玩AV| 怡红院日本一道日本久久| 少妇久久久久久被弄到高潮| 欧美久久久久久午夜精品| 亚洲精品tv久久久久久久久| 93精91精品国产综合久久香蕉| 伊人情人综合成人久久网小说| avtt天堂网久久精品| 亚洲国产天堂久久久久久| 国产精品美女久久久m| 伊人久久五月天| 99久久国产亚洲高清观看2024 | 国产亚洲美女精品久久久久狼| 国产精品99久久久久久www| 国内高清久久久久久| 久久久艹| 国内精品久久久久久不卡影院| 色8久久人人97超碰香蕉987| 香港aa三级久久三级老师2021国产三级精品三级在 | 国产成人精品久久一区二区三区 | 久久久久亚洲AV无码去区首| 亚洲αv久久久噜噜噜噜噜| 久久久精品国产亚洲成人满18免费网站 | 久久香蕉国产线看观看精品yw| 久久毛片免费看一区二区三区| 久久国产精品-国产精品| 亚洲精品乱码久久久久久蜜桃不卡 | 久久亚洲日韩看片无码| 麻豆久久| 中文字幕无码久久久| 色婷婷噜噜久久国产精品12p| 91精品国产91热久久久久福利| 久久精品国产91久久麻豆自制| 精品久久久久久无码专区 | 丰满少妇人妻久久久久久| 少妇久久久久久久久久| 久久久久成人精品无码中文字幕 | 97精品伊人久久久大香线蕉| 久久AV高潮AV无码AV| 久久精品国产亚洲AV高清热| 久久久久久亚洲Av无码精品专口 |