以前の質問を改善したい:
球体をスクリーンに投影するにはどうすればよいですか?
(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);