我想完善以前的问题:
如何将球体投影到屏幕上?
(2)给出一个简单的解决方案:
屏幕上的近似半径[CLIP SPACE] = 世界半径 * cot(fov / 2) / Z 和: fov = 视场角 Z = z 相机到球体的距离 结果在剪辑空间中,乘以视口大小以获得以像素为单位的大小
现在我的问题是我没有 FOV。只有视图和投影矩阵是已知的。(以及视口大小,如果有帮助的话)
任何人都知道如何从投影矩阵中提取 FOV?
更新:
这种近似在我的情况下效果更好:
float radius = glm::atan(radius/distance);
radius *= glm::max(viewPort.width, viewPort.height) / glm::radians(fov);