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/2fovx/2)。
  2. 使用宽度和纵横比计算高度。
  3. 使用高度和到近平面的距离计算垂直 FOV(提示:有一个直角三角形的边nearheight/2fovy/2)。
于 2012-11-17T09:31:11.617 回答