从世界位置获取屏幕位置

时间:2011-11-20 11:45:13

标签: c directx directx-9

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

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

1 个答案:

答案 0 :(得分:2)

您有一个视图/眼睛变换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]映射到深度缓冲区值范围。