視口變換在投影變換之後,視口變換的作用是將投影平面上的點轉換為螢幕上的點,這是乙個縮放的過程。
投影變換的作用是將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 ...