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

            麒麟子

            ~~

            導航

            <2009年4月>
            2930311234
            567891011
            12131415161718
            19202122232425
            262728293012
            3456789

            統計

            常用鏈接

            留言簿(12)

            隨筆分類

            隨筆檔案

            Friends

            WebSites

            積分與排名

            最新隨筆

            最新評論

            閱讀排行榜

            評論排行榜

            ZBuffer與WBuffer

            Depth-Buffer(深度緩存)有兩種:Z-Buffer 和 W-Buffer,這里討論這兩種深度緩存的區別,以及如何在兩者之間轉換。
              w 的含義
              3D空間點的坐標是(x,y,z),為了使矩陣乘法具有平移變換的功效,我們用4D空間中的點(x,y,z,w)來表示3D空間中的點(x',y',z'),這兩個不同空間點之間的關系是:
              
              x' = x / w
              y' = y / w
              z' = z / w
              
              像這樣用四維空間點表示三維空間點,或者說用 n + 1 維空間點表示 n 維空間點的方法叫做 “齊次坐標表示法”。
              
              實際使用中,在模型->世界轉換、世界->視圖轉換過程中,w 通常保持不變,總是等于一,這樣,齊次坐標的前三個分量就是對應3D空間點的三個坐標分量。但是,經過投影變換后,w 將得到一個比例值,比如,一般的透視投影變換矩陣是:
              
              | W  0  0  0 |
              | 0  H  0  0 |
              | 0  0  Q  1 |
              | 0  0 -QZn 0 |
              
              其中  Zn = 近裁剪面 z 坐標
              Zf = 遠裁剪面 z 坐標
              W = 2 * Zn / 視口寬度
              H = 2 * Zn / 視口高度
              Q = Zf / (Zf - Zn)
              
              將點(x,y,z,1)乘以此矩陣,w 便不再是一,而對應的3D空間點坐標(x / w,y / w,z / w)將出現一個縮放效果。同時,因為 w 的值通常與 z 坐標成正比(比如經過上面這個矩陣的變換,w 的值其實就是 z 坐標的值),所以經過投影變換,物體會產生近大遠小的效果。
              
              Z-Buffer 與 W-Buffer 的區別
              簡單的說,z-buffer 與 w-buffer 的區別就是前者保存的是點的 z 坐標,而后者保存的是點的 w 坐標。
              
              具體的說,兩者因為保存的值有不同的含義,所以表現出來的實際效果也會有差別。
              
              z-buffer 保存的是經過投影變換后的 z 坐標,前面說過,投影后物體會產生近大遠小的效果,所以距離眼睛比較近的地方,z 坐標的分辨率比較大,而遠處的分辨率則比較小,換句話說,投影后的 z 坐標在其值域上,對于離開眼睛的物理距離變化來說,不是線性變化的(即非均勻分布),這樣的一個好處是近處的物體得到了較高的深度分辨率,但是遠處物體的深度判斷可能會出錯。
              
              w-buffer 保存的是經過投影變換后的 w 坐標,而 w 坐標通常跟世界坐標系中的 z 坐標成正比,所以變換到投影空間中之后,其值依然是線性分布的,這樣無論遠處還是近處的物體,都有相同的深度分辨率,這是它的優點,當然,缺點就是不能用較高的深度分辨率來表現近處的物體。
              
              從硬件實現角度來說,幾乎所有的硬件3D加速卡都支持 z-buffer,而 w-buffer 的支持沒有 z-buffer 那么廣泛。另外,早期的 Direct3D 版本看起來也不支持 w-buffer。
              
              Z-Buffer 與 W-Buffer 之間的轉換
              根據上面的矩陣變換,可以很容易的導出將 w-buffer 轉換成 z-buffer 的公式:
              
              zDepth = Q * ( wDepth - Zn ) / wDepth
              = Zf / ( Zf - Zn ) * ( wDepth - Zn ) / wDepth
              
              這個轉換公式有什么用處?舉個例子:3DS MAX 使用的是 w-buffer,如果從 3DS MAX 中導出深度信息到 Direct3D 中,作為預渲染的背景使用,就有可能用到上面這個轉換。當然,如果在 D3D 中使用 w-buffer,問題就不大了,但是如果使用 z-buffer,不經過這樣的轉換,渲染結果就會出錯。

            posted on 2009-04-24 17:49 麒麟子 閱讀(777) 評論(1)  編輯 收藏 引用 所屬分類: DirectX

            評論

            # re: 骨骼動畫-------它終于動起來了。 2009-04-29 22:31 張宏飛

            看看讓我留言否?  回復  更多評論   

            国内精品久久久久影院老司| 国产福利电影一区二区三区久久久久成人精品综合 | 色综合久久综精品| 国产精品美女久久久久AV福利| 欧美精品福利视频一区二区三区久久久精品 | 九九精品99久久久香蕉| 青青青青久久精品国产| 国产精品乱码久久久久久软件| 久久久国产99久久国产一| 国产激情久久久久久熟女老人| 97久久精品无码一区二区| 性做久久久久久久久浪潮| 91麻豆国产精品91久久久| 嫩草影院久久国产精品| 久久久一本精品99久久精品88| 91精品国产色综合久久| 亚洲精品tv久久久久久久久久| 精品久久人妻av中文字幕| 国内精品久久久久影院亚洲| 久久久久久国产a免费观看不卡 | 国产产无码乱码精品久久鸭| 久久久精品国产亚洲成人满18免费网站 | 91精品国产高清91久久久久久| 久久久久99这里有精品10| 久久精品国产亚洲Aⅴ香蕉 | 久久天天躁狠狠躁夜夜躁2014| 久久精品国产亚洲综合色| 欧美亚洲色综久久精品国产 | 品成人欧美大片久久国产欧美| 久久久久亚洲AV成人片| 久久成人国产精品免费软件| 亚洲国产成人久久笫一页| 亚洲伊人久久成综合人影院 | 日韩美女18网站久久精品| 久久久噜噜噜久久| 久久夜色撩人精品国产小说| 激情五月综合综合久久69| yellow中文字幕久久网| 久久精品国产72国产精福利| 久久国产精品波多野结衣AV| 久久精品中文字幕一区|