Because you need the w coordinate to calculate the perspective. After the output from the vertex shader, than DirectX performs the separation of perspectives by dividing by w.
, 32768, -32768, 32768, 65536 , w 0.5, -0.5, 0.5, 1. w , . , 2D-.
: , , , .
, D3DXMatrixPerspectiveLH
2*zn/w 0 0 0
0 2*zn/h 0 0
0 0 zf/(zf-zn) 1
0 0 zn*zf/(zn-zf) 0
x, y, z, 1 ( w 1) ,
x' = ((2*zn/w) * x) + (0 * y) + (0 * z) + (0 * w)
y' = (0 * x) + ((2*zn/h) * y) + (0 * z) + (0 * w)
z' = (0 * x) + (0 * y) + ((zf/(zf-zn)) * z) + ((zn*zf/(zn-zf)) * w)
w' = (0 * x) + (0 * y) + (1 * z) + (0 * w)
, w z . w z, . z .
, , (2, 1, 5, 1), zn (Z-Near) 1 a zf (Z-Far 10) aw () 1 ah () 1.
,
x' = (((2 * 1)/1) * 2
y' = (((2 * 1)/1) * 1
z' = ((10/(10-1) * 5 + ((10 * 1/(1-10)) * 1)
w' = 5
x' = 4
y' = 2
z' = 4.4
w' = 5
x'' = 0.8
y'' = 0.4
z'' = 0.88
w'' = 1
. , x y -1 1, z 0 1. , .
, , | x '| | y '| | z '| | w '| z ' 0, . .
, , : D
Edit2: , ROW. .