視野角・画角

fov.png
レンズ 画角 焦点距離 写る範囲 被写体の大きさ
広角 広い 短い 広い 小さい
望遠 狭い 長い 狭い 大きい

焦点距離の短いレンズほど広い範囲が写ります。
逆に焦点距離が長いレンズほど狭い範囲が写ります。
同じ距離から同じ被写体を写した場合、焦点距離の短い広角レンズになるほど被写体が小さく写り、
焦点距離の長い望遠レンズになるほど被写体が大きく写ります(そして遠ーーーくの背景も映る)。

glFrustumから視野角を求めるには?

透視投影行列
三角法+連立方程式で求められる。
不明なのはrとθ

水平方向の視野角(1)
\begin{align} rcos\theta=near\\ rsin\theta=\frac{left-right}{2} \end{align}

垂直方向の視野角

(2)
\begin{align} rcos\theta=near\\ rsin\theta=\frac{top-bottom}{2} \end{align}
triangle.png

割り算すれば、rを消すことが出来る。
しかも、$tan\theta$になる
ここから、角度θがわかる。

(3)
\begin{align} \frac{rsin\theta}{rcos\theta}=tan\theta \end{align}

まとめると

(4)
\begin{align} tan\theta=\frac{top-bottom}{2 \times near} \end{align}

あとはatan()でtanθからθの値を求められる。
もっと簡単にすると

atan2(top,near);

perspective-matrix projected-size

サポートサイト Wikidot.com perspective-matrixprojected-size