DirectX で World Position から Screen Position を取得したい。
ボールのワールド ポジションを取得できます。しかし、それを画面位置に変換する方法がわかりません。
ビュー/目の変換 V (「カメラ」を「配置」するもの) と射影変換 P があります。
クリップ空間座標は
clip_position = P * V * world_space_position
クリップ スペースから、クリップ スペース座標を 4 番目のクリップ スペース座標 w で割ることにより、NDC スペースに到達します。
ndc_x = clip_x / clip_w
ndc_y = clip_y / clip_w
ndc_z = clip_z / clip_w
ndc_w = clip_w / clip_w = 1
ビューポートの XY 座標は、[-1,1] の範囲をビューポートの寸法にマッピングすることによって取得されます。OpenGL と DirectX の違いは、OpenGL では深度範囲 [-1,1] が [0, DEPTH_BUFFER_RESOLUTION] にマッピングされるのに対し、DirectX では深度範囲 [0, 1] が深度バッファー値の範囲にマッピングされることです。