X position of the left edge at the near plane
X position of the right edge at the near plane
Y position of the bottom edge at the near plane
Y position of the top edge at the near plane
distance from origin to near plane (in Z-)
distance from origin to far plane (in Z-)
a matrix that maps from eye space to clip space. To obtain NDC, the vector must be divided by w.
const m = frustum_RH_M11!float(-2, 2, -4, 4, 2, 4); const vl = fvec(-2, -4, -2); const vh = fvec(4, 8, -4); const vc = fvec(0, 0, -3); auto toNdc(in FVec3 v) { const clip = m * fvec(v, 1); return (clip / clip.w).xyz; } import gfx.math.approx : approxUlp; assert(approxUlp( toNdc(vl), fvec(-1, 1, -1) )); assert(approxUlp( toNdc(vh), fvec(1, -1, 1) )); assert(approxUlp( toNdc(vc), fvec(0, 0, 1f/3f) ));
Build a perspective projection matrix with right-hand NDC and [0 .. 1] depth clipping