幾何学って図で説明しないと分かった気がしないぜ。
とりあえずクリッピング領域のサイズに合わせる。
x' = x * (2 / width)
z' = z * (1 / far)
w' = w
そしてzとwを入れ替える。コレで遠いものは小さく見えるようになる(zが倍ならx' '/w' 'は半分だ)。
x' ' = x'
z' ' = w'
w' ' = z'
この直後はz/w方向が逆になってることに注意。
z/w方向の向きを直しつつクリッピング領域に合わせる。
x' ' ' = x' '
z' ' ' = z' ' * - near / (far - near) + w' ' * far / (far - near)
w' ' ' = w' '
なんかz/w方向に偏りがあるけど気にすんな。どうせこの後z/wはzバッファでの比較にしか使わないから大小関係さえ保たれていれば問題ない。