• <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>

            麒麟子

            ~~

            導(dǎo)航

            <2009年3月>
            22232425262728
            1234567
            891011121314
            15161718192021
            22232425262728
            2930311234

            統(tǒng)計(jì)

            常用鏈接

            留言簿(12)

            隨筆分類

            隨筆檔案

            Friends

            WebSites

            積分與排名

            最新隨筆

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            IDirect3DDevice9::SetClipPlane

            突然看到這個(gè)函數(shù)。
            HRESULT SetClipPlane(
              DWORD Index,
              CONST float * pPlane
            );

            雖然DX SDK上面有,但還是有很多朋友不喜歡看那些拉丁字母,我也順便就記錄一下吧。

            參數(shù):
            第一個(gè)是索引,不用說(shuō)了。

            第二個(gè)是存著 A B C D的數(shù)組。
            這個(gè)數(shù)組最后會(huì)用來(lái)構(gòu)建 Ax+By+Cz+Dw = 0;平面。

            然后頂點(diǎn)會(huì)根據(jù)自已的位置(x,y,z,w)來(lái)進(jìn)行判斷。如果Ax+By+Cz+Dw >= 0。則表示在平面前方,保留。反之則在后方,被裁剪掉。

            值得注意的時(shí),在固定管線使用平面裁剪的時(shí)候,是在世界坐標(biāo)系中處理的。


            而用SHADER的時(shí)候,是在裁剪空間中處理的。(即頂點(diǎn)輸出的時(shí)候的坐標(biāo)系)
            貌似還是太抽象。比如頂點(diǎn)輸入坐標(biāo)是pos   此時(shí)的坐標(biāo)變換陣是WVP,則 Output.pos = mul(pos,WVP);  那么,此時(shí)的裁剪空間就是Output.pos對(duì)應(yīng)的坐標(biāo)系空間。


            另外,默認(rèn)情況下D3DRS_CLIPPLANEENABLE 是沒(méi)有打開(kāi)的,應(yīng)該在SetRenderState中手工打開(kāi)。

            值得注意的是:D3DXPLANE進(jìn)行矩陣變換的時(shí)候,要將需要乘的那個(gè)矩陣進(jìn)行求逆和轉(zhuǎn)置,再相乘。SDK中代碼如下
            D3DXPLANE   planeNew;
            D3DXPLANE   plane(
            0,1,1,0);
            D3DXPlaneNormalize(
            &plane, &plane);

            D3DXMATRIX  matrix;
            D3DXMatrixScaling(
            &matrix, 1.0f,2.0f,3.0f); 
            D3DXMatrixInverse(
            &matrix, NULL, &matrix);
            D3DXMatrixTranspose(
            &matrix, &matrix);
            D3DXPlaneTransform(
            &planeNew, &plane, &matrix);


            上面的D3DXPLANE plane(0,1,1,0)如果你覺(jué)得不直觀的話,DX提供了以下一些生成PLANE的函數(shù)
            D3DXPLANE * D3DXPlaneFromPoints(
              D3DXPLANE 
            * pOut,
              CONST D3DXVECTOR3 
            * pV1,
              CONST D3DXVECTOR3 
            * pV2,
              CONST D3DXVECTOR3 
            * pV3
            );

            上面的PV1 PV2 PV3則是平面上的三個(gè)點(diǎn)。這個(gè)函數(shù)可以很容易地求得一個(gè)三角形所在的平面。

            D3DXPLANE * D3DXPlaneFromPointNormal(
              D3DXPLANE 
            * pOut,
              CONST D3DXVECTOR3 
            * pPoint,
              CONST D3DXVECTOR3 
            * pNormal
            );

             

            pPoint為平面上的一個(gè)點(diǎn)。 pNormal是平面的法線方向。
            比如,你想創(chuàng)建一個(gè)水平平面,并且朝上。 則可以將pPoint傳入0,0,0  而pNormal傳入0,1,0即可。

            posted on 2009-10-11 16:34 麒麟子 閱讀(2122) 評(píng)論(0)  編輯 收藏 引用 所屬分類: DirectX

            久久99热精品| 国内精品久久久久影院老司| 亚洲成av人片不卡无码久久| 亚洲国产精品久久久久婷婷老年| 日本强好片久久久久久AAA | 精品熟女少妇AV免费久久| A级毛片无码久久精品免费| 99久久国产综合精品网成人影院| 久久99精品国产| 国产精品99久久精品爆乳| A级毛片无码久久精品免费| 久久99精品九九九久久婷婷| 久久久久香蕉视频| 久久精品国产男包| 91久久婷婷国产综合精品青草 | 久久久久亚洲av综合波多野结衣| 免费精品久久天干天干| 国产综合久久久久| 久久久久久久尹人综合网亚洲| 7国产欧美日韩综合天堂中文久久久久 | 亚洲国产成人久久综合一区77 | 成人精品一区二区久久久| 66精品综合久久久久久久| 久久久久久国产精品免费免费| 色综合久久中文字幕综合网| 伊人久久久AV老熟妇色| 久久综合九色综合97_久久久| 精品久久久久中文字| 99久久这里只精品国产免费| 国产精品99久久久久久人| 久久无码国产| 久久国产精品-国产精品| 综合久久精品色| 久久精品国产亚洲欧美| 久久久黄色大片| 久久国产高清字幕中文| 亚洲va中文字幕无码久久不卡 | 亚洲精品国产字幕久久不卡| 久久99久久成人免费播放| 久久久久无码精品国产| 亚洲成av人片不卡无码久久|