D3D的矩陣變換

2021-04-15 22:48:13 字數 837 閱讀 3015

「物體座標->世界座標->視座標->投影座標->螢幕座標」這部分的說明已經不能再多了,但是有些細節其實d3d的文件中也比較難發現出來,還有些在文件中的解釋可能會讓人比較迷惑。

1。視矩陣是什麼?

參見「d3d的視矩陣是如何構造的

」。2。投影矩陣把z投影到**去了?

我們在3d圖形學中學的投影矩陣是給出乙個平面,將3d空間中的影象都投影到這個平面上,這個平面一般選取z=d這樣的平面,所以構造出來的矩陣將所有的三維座標的z都設定為了d。但是這樣就沒有辦法進行z測試了。所以,d3d中選擇了乙個矩陣將在近遠平面間的向量的z/w值轉換到0-1之間。注意這裡的z/w,投影矩陣並沒有把z直接轉換到0-1之間,最後的z比較需要齊次除法才行。既然投影到0到1之間,就沒有「投影到哪個平面去」的問題了。

3。霧運算公式中的近遠距離到底是到**的?

d3d的文件中說fog_near和fog_far是到觀察點的距離,觀察點這個詞怎麼理解呢。

實際上,fog的這個觀察點不是我們的眼睛位置,而是指的投影齊次三維空間的z=0平面。

d3d的文件中fog節的note中說「需要乙個符合規定的投影矩陣」這段不太清楚,其實說明白就是說霧是根據應用完投影矩陣後的z,而沒進行齊次化之前的值來計算fog引數的。

4。什麼時候進行齊次除法?

d3d的文件中的viewports and clipping介紹螢幕座標變換的時候明確的告訴我們:在進行完螢幕座標變換後,座標還是齊次的,也就是還沒進行齊次除法呢。進行齊次除法之後馬上就是光柵化了。

5。進行z測試的值是透視變換之後的z值麼?

不是,是z/w,而且,最後進行ps操作後才會修改zbuffer(典型根據就是alphatest),所以那個時候早就進行完齊次除法了。 

d3d矩陣變換

1.d3d的繪製流水線 區域性座標系 模型空間 世界座標系 觀察座標系 背面消隱 光照 裁剪 投影 視口變化 光柵化 每個3d模型都有自己的空間,空間的中心 原點 就是模型的中心。世界空間就是物體 模型 存在的地方。世界的中心就是原點 0,0,0 注意螢幕中間的那一點不是世界空間的中心點,螢幕中間的...

d3d矩陣總結

d3d中實現物件的基本渲染需要使用shader指令碼,而shader指令碼最低的的需求就是頂點與矩陣,在這裡主要討論矩陣 這個矩陣是3個矩陣運算得來的,分別是世界矩陣 視矩陣和投影矩陣 世界矩陣 世界矩陣就是標識者物體在世界座標系中的位置,預設下設為單位陣即可 視矩陣 視矩陣是攝像機位置和朝向的設定...

d3d 投影矩陣

這一節部落格 我將講述從乙個頂點從相機空間到到視平面的座標變化過程,理解這個過程座標值大小的範圍對於實現shadowmap,projectivetexture,pick技術來說至關重要。當然我還是省略掉大量詳細的推導過程,只是給出結果。如下面圖所示,紅色圈住的部分,就想下面的圖一樣 實際上d3d11...