2

呼び出し元によって指定された垂直視野とアスペクト比だけで (完全に問題なく) 動作する次の透視投影マトリックスを考えてみましょう。

func (me *Mat4) Perspective (fovY, aspect, near, far float64) {
    tfY = near * math.Tan(fovY * math.Pi / 360)
    tfX = tfY * aspect
    me.Frustum(-tfX, tfX, -tfY, tfY, near, far)
}

これをサポートするためにこの関数の本体を拡張するにはどうすればよいでしょうか: 呼び出し元は、垂直 (fovY) または水平 (fovX) の視野を指定できますが、両方とアスペクト比を指定することはできません。この関数は、指定されたアスペクト比と fovX だけから不足している fovY をどのように計算できますか?

4

1 に答える 1

3

これは機能するはずです:

  1. 水平FOVと近平面までの距離を使用して幅を計算します(ヒント:辺nearwidth/2角度のある直角三角形がありfovx/2ます)。
  2. 幅とアスペクト比を使用して高さを計算します。
  3. 高さと近平面までの距離を使用して垂直FOVを計算します(ヒント:辺nearheight/2角度のある直角三角形がありfovy/2ます)。
于 2012-11-17T09:31:11.617 に答える