DirectX視口變換矩陣詳解

2021-06-19 21:13:04 字數 1481 閱讀 5553

視口變換在投影變換之後,視口變換的作用是將投影平面上的點轉換為螢幕上的點,這是乙個縮放的過程。

投影變換的作用是將viewing frustum(視景體)中的場景投影到乙個平面上,這個平面就是投影平面,在directx中,使用近剪裁平面作為投影平面(z=1),關於透視投影的矩陣求解,請參考透視投影詳解

視口變換則是將這個cuboid中的物體變換到視口中,見下圖。

其中cuboid的座標範圍是

而viewport的座標範圍是

注:由上圖知,視口的起點為(x, y),寬高分別為width和height,x軸向右為正,y軸向下為正,y軸的方向與三維座標正好相反。視口是乙個2d平面,但是在viewport變換中,z座標也是跟著變換的,只是在這個圖中沒有體現。

先求變換矩陣的第一列

cuboid中的左上角點(-1, 1, 0, 1)對映到viewport中的起點(x, y, minz, 1),

cuboid中的右上角點(1, 1, 0, 1)對映到viewport中的點(x+width, y, minz, 1),

假設變換矩陣的第一列為[x』, y』, z』, 1]t據矩陣乘法有

[-1, 1, 0, 1]* [x』, y』, z』, 1]t = x

[1, 1, 0, 1]* [x』, y』, z』, 1]t = x+width

對應的兩個方程為

-1*x』 + 1*y』 + 0*z』 + 1*w』 = x

1*x』 + 1*y』 + 0*z』 + 1*w』 = x+width

解之得x』 = width/2

y』 = 0

z』 = 0

w』 = x + width/2

再求第二列

列方程(這裡省略了x』,z』,但結果不變,下同)

y』 + 1*w』=y

-1*y』 + 1*w』=y+height

解之得y』 = -height/2

w』 = y + height/2

最後求第三列

列方程0*z』 + 1*w』 = minz

1*z』 + 1*w』 = maxz

解之得z』 = maxz – minz

w』 = minz

組合以上各列,得到視口變換矩陣

DirectX視口變換矩陣詳解

視口變換在投影變換之後,視口變換的作用是將投影平面上的點轉換為螢幕上的點,這是乙個縮放的過程。投影變換的作用是將 viewing frustum 視景體 中的場景投影到乙個平面上,這個平面就是投影平面,在directx中,使用近剪裁平面作為投影平面 z 1 關於透視投影的矩陣求解,請參考 透視投影詳...

視錐和投影矩陣,視口變換

縮放與視域角有關 投影的過程就是xyz分量除以w的過程 可知投影在了z 1,的平面 上面的z是指乘以投影矩陣 剪裁矩陣 後的z 這裡設上面這個dip矩陣為a 經過計算可知 在近裁剪面的點 x,y,n,1 a x zoomx,y zoomy,0,n 投影後為 x zoomx n,y zoomy n,0...

投影變換與視口變換

一些說明 0.投影變換 描述如何指定視景體 viewing volume 的形狀和方向。視口變換 解釋如何控制三維模型座標到螢幕座標的變換。1.無論是透視投影還是平行投影 正交投影 只有在視景體中的物體才可見。2.下圖為opengl預設視點位置 eyex,eyey,eyez 0.0,0.0,0.0 ...