从世界位置获取屏幕位置

我希望从DirectX中的世界位置获得屏幕位置。

我可以得到我的球的世界位置。 但我不知道如何将其转换为屏幕位置。

你有一个视图/眼睛变换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 

然后通过将范围[-1,1]映射到视口尺寸来到达视口XY坐标。 OpenGL和DirectX之间的区别在于,在OpenGL中,深度范围[-1,1]映射到[0,DEPTH_BUFFER_RESOLUTION],而在DirectX中,深度范围[0,1]映射到深度缓冲区值范围。