left, right, bottom, top, near, far
defines the world clip planes.
# Create a frustum transformation matrix
#
# `left, right, bottom, top, near, far` defines the world clip planes.
new frustum(left, right, bottom, top, near, far: Float)
do
var dx = right - left
var dy = top - bottom
var dz = far - near
assert near > 0.0
assert far > 0.0
assert dx > 0.0
assert dy > 0.0
assert dz > 0.0
var mat = new Matrix(4, 4)
mat[0, 0] = 2.0 * near / dx
mat[0, 1] = 0.0
mat[0, 2] = 0.0
mat[0, 3] = 0.0
mat[1, 0] = 0.0
mat[1, 1] = 2.0 * near / dy
mat[1, 2] = 0.0
mat[1, 3] = 0.0
mat[2, 0] = (right + left) / dx
mat[2, 1] = (top + bottom) / dy
mat[2, 2] = -(near + far) / dz
mat[2, 3] = -1.0
mat[3, 0] = 0.0
mat[3, 1] = 0.0
mat[3, 2] = -2.0 * near * far / dz
mat[3, 3] = 0.0
return mat
end
lib/matrix/projection.nit:57,2--95,4