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

            公告

            聯(lián)系我:我的126郵箱: billhsu。 Locations of visitors to this page
            <2010年6月>
            303112345
            6789101112
            13141516171819
            20212223242526
            27282930123
            45678910

            統(tǒng)計

            • 隨筆 - 41
            • 文章 - 0
            • 評論 - 82
            • 引用 - 0

            常用鏈接

            留言簿(16)

            隨筆分類

            隨筆檔案

            相冊

            Game Dev

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            可編程管道下的剪裁平面

            剪裁平面 (Clip Plane) 在圖形學(xué)領(lǐng)域有著重要的作用,比如水面模擬中,渲染折射紋理時,我們就必須將水面以上的頂點通過剪裁平面剪裁掉。

            在過去的固定渲染管道時代,剪裁平面的實現(xiàn)較為簡單,比如在 DirectX 9 中,可以先設(shè)定剪裁平面在世界坐標(biāo)系下的方程 (ax+by+cz+d=0) ,再調(diào)用 SetClipPlane(DWORD Index,CONST float * pPlane) 這個 API 函數(shù)就可以了。

            ?

            附上例子程序:

            vPosition=D3DXVECTOR3(0,0,0); // 平面上一個點
            vNormal=D3DXVECTOR3(0,1,0); // 法向量
            D3DXPlaneFromPointNormal(?&clipplane,?&vPosition,?&vNormal?); // 生成剪裁平面

            m_pDevice()->SetClipPlane(?0,?(
            float *)clipplane);?

            ?

            然而,在現(xiàn)在的可編程管道 (programmable pipeline) 下,設(shè)置的剪裁平面會被在剪裁坐標(biāo)系下處理,而不是在世界坐標(biāo)系下。

            解決這個問題的方法有:

            1)? 給要剪裁的頂點做標(biāo)記,在Pixel Shader中把它剪裁掉。

            2)? 使用近斜平面裁剪(Oblique Near-Plane Clipping),即修改投影矩陣,將要剪裁的頂點放在視截體之外,從而避免了該頂點的繪制。

            3)? 修改平面方程,使之從世界坐標(biāo)系轉(zhuǎn)換到剪裁坐標(biāo)系。


            上述方法中,第一種和第二種效率并不高:在
            Pixel Shader中剪裁沒有減少任何不必要的頂點處理,而計算近斜平面裁剪矩陣較為繁瑣。所以,方法三是最佳選擇。

            ?要將一個平面從世界坐標(biāo)系轉(zhuǎn)換到剪裁坐標(biāo)系,必須求出這個變換矩陣。

            設(shè)平面方程ax+by+cz+d=0,用一個4維向量來n表示(a,b,c,d),設(shè)平面上有個點p:(x,y,z,1)。根據(jù)平面方程的定義,有:


            nTp = ax + by + cz + d = 0

            設(shè)矩陣R可以讓點P從世界坐標(biāo)系轉(zhuǎn)換到剪裁坐標(biāo)系,矩陣Q可以讓平面n實現(xiàn)同樣的變換。那么,有:

            p'= Rp
            n'= Qn

            其中p'n'分別是轉(zhuǎn)換后的點與平面。


            n'Tp'= 0
            (Qn)T (Rp) = 0
            nTQTRp = 0


            如果:QTR = I

            那么:

            nTQTRp = nTIp = nTp = 0

            于是:

            QT = R-1
            Q
            = (R-1)T

            DirectX 3D中,將一個點從世界坐標(biāo)系轉(zhuǎn)換到剪裁坐標(biāo)系,所用的矩陣為觀察矩陣與投影矩陣的乘積,即:

            D3DXMATRIX??TranMatrix?=?matView*matProj;

            (TranMatrix為所求的變換矩陣,matViewmatProj分別為觀察矩陣與投影矩陣)

            ?

            附上在D3D中變換的完整代碼:

            D3DXPLANE?tempPlane?=?clipplane;
            D3DXPlaneNormalize(&tempPlane,?&tempPlane);

            D3DXMATRIX??TranMatrix?=?matView*matProj;
            D3DXMatrixInverse(&TranMatrix,?NULL,?&TranMatrix);
            D3DXMatrixTranspose(&TranMatrix,?&TranMatrix);
            D3DXPlaneTransform(&tempPlane,?&tempPlane,?&TranMatrix);

            參考資料:

            1.Back Face Culling Notes ,Jordan Smith (University of California, Berkeley)

            http://www.cs.berkeley.edu/~ug/slide/pipeline/assignments/backfacecull.shtml?

            2.GameDev Forum

            http://www.gamedev.net/community/forums/topic.asp?topic_id=402381

            3.Oblique Near-Plane Clipping with Orthographic Camera ,Aras

            http://aras-p.info/texts/obliqueortho.html

            posted on 2010-01-20 22:00 Bill Hsu 閱讀(2031) 評論(2)  編輯 收藏 引用 所屬分類: C/C++Game DevAlgorithm

            評論

            # re: 可編程管道下的剪裁平面 2010-06-12 08:38 小時候可靚了

            嗯,你的比他的說得詳細(xì)!
              回復(fù)  更多評論    

            # re: 可編程管道下的剪裁平面 2010-06-12 16:55 Bill Hsu

            @小時候可靚了
            :-)
              回復(fù)  更多評論    
            久久婷婷成人综合色综合| 久久综合伊人77777麻豆| 亚洲精品乱码久久久久久按摩 | 久久久久国产精品三级网| 三级韩国一区久久二区综合| 伊人久久综合无码成人网| 人人狠狠综合久久亚洲88| 综合人妻久久一区二区精品| 久久久久亚洲av无码专区| 欧美日韩久久中文字幕| 91亚洲国产成人久久精品网址| 99精品久久久久久久婷婷| 国产精品久久久久久久久| 人妻无码αv中文字幕久久琪琪布| 99久久99久久精品免费看蜜桃| 久久久艹| 婷婷综合久久中文字幕| 77777亚洲午夜久久多人| 国产精品成人99久久久久| 日韩精品国产自在久久现线拍| 亚洲欧洲久久av| 中文精品99久久国产| 久久99中文字幕久久| 亚洲国产精品人久久| 亚洲狠狠婷婷综合久久久久| 久久综合成人网| 99久久精品国产一区二区三区| 久久久久久国产精品免费无码| 亚洲国产成人精品女人久久久 | 精品国产乱码久久久久软件| 国产精品欧美亚洲韩国日本久久 | 久久大香香蕉国产| 亚洲va久久久噜噜噜久久| 久久久SS麻豆欧美国产日韩| 人人妻久久人人澡人人爽人人精品| 久久99国产亚洲高清观看首页| 无码超乳爆乳中文字幕久久| 亚洲综合日韩久久成人AV| 久久久久亚洲AV无码观看| 欧美亚洲国产精品久久久久| 亚洲国产精品一区二区久久hs|