今天在查找斜視椎體是怎麼回事的時候,看了一下unity聖典的官方介紹,鏈接是:http://game.ceeger.com/Manual/ObliqueFrustum.html
我發現這裏解釋的不是很清楚,核心代碼爲
function SetObliqueness(horizObl: float, vertObl: float;) {
var mat: Matrix4x4 = camera.projectionMatrix;
mat[0, 2] = horizObl;
mat[1, 2] = vertObl;
camera.projectionMatrix = mat;
}
上面的第三第四行解釋的糊里糊塗,其實這是修改了投影矩陣,投影矩陣並不是只是簡簡單單的投影變換而已,它的完整形態是這樣的
可以看到mat[0, 2]就是(r + l/)(r - l),mat[1, 2]就是(t + b/)(t - b),其中的座標(l,t)代表了視椎體的近平面的左上角,座標(r,b)代表了視椎體近平面的右下角,而一般情況下l是等於-r的,因爲視椎體左右對稱,同理t = -b;但是我們如果是需要斜視椎體的話,那麼左右或者上下九不對稱了,所以修改這個矩陣的這兩個值