我想从 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] 映射到深度缓冲区值范围。