透视投影矩阵:如何从仅水平FoV和纵横比计算垂直FoV?

时间:2012-11-17 09:05:25

标签: opengl 3d matrix projection-matrix perspectivecamera

考虑下面的透视 - 投影矩阵,它只使用调用者给出的垂直视场和宽高比来工作(非常精细):

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?

1 个答案:

答案 0 :(得分:3)

这应该有效:

  1. 使用水平FOV和距离近平面的距离计算宽度(提示:右边三角形有边nearwidth/2以及角度fovx/2。)
  2. 使用宽度和宽高比计算高度。
  3. 使用高度和距近平面的距离计算垂直FOV(提示:右边三角形有边nearheight/2以及角度fovy/2)。