我希望从DirectX中的世界位置获得屏幕位置。
我可以获得球的世界位置。但我不知道如何将其转换为屏幕位置。
答案 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]映射到深度缓冲区值范围。