Why do some games require parallel projection but others don't?

GetProjectionMatrix. The 3x4 matrix produced by GetEyeToHeadTransform doesn’t contain the Z manipulation for the perspective division.

GetProjectionRaw also has this problem, as it produces the variables required for gluPerspective, which assumes the Z axis is parallel with the display normal (and that the center of the display is directly ahead of the eye). These assumptions held unusually well for headsets like the Vive (dedicated display panel centered straight ahead of each eye), but not Pimax or Index.

I may be a little mistaken on how these pieces fit together. It could be that the ComposeProjection example in the GetProjectionRaw documentation could work correcly when combined with the GetEyeToHeadTransform, because it has enough variables to convey how off-center the render frame is (while GetEyeToHeadTransform can contain the rotation). Both gluPerspective and Microsoft’s sample ProjectionMatrix assume centered displays, however. D3DXMatrixPerspectiveOffCenterRH doesn’t.

6 Likes