Your conversion can be written symbolically as
y = TPVW x
Where:
x = (x0, y0, z0, w0) T : object coordinates (column vector 4x1)
y = (s, t, r, q) T : window space coordinates (4x1 column vector)
W : World Modeling Model (4x4)
V : view the modeling matrix (4x4)
P : projection matrix (4x4)
T : view transformation matrix (4x4)
The calculation is performed as:
y = T (P (V (W x)))
i.e. from right to left. HLSL Code:
float4 worldPosition = mul(World, input.Position); // W x float4 viewPosition = mul(View, worldPosition); // V (W x) float4 projPosition = mul(Projection, viewPosition); // P (V (W x)) float4 vportPosition = mul(Viewport, projPosition); // T (P (V (W x)))
source share