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

Opengl 透视投影矩阵:如何仅从水平视场和纵横比计算垂直视场?,opengl,3d,matrix,projection-matrix,perspectivecamera,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) } 如何扩展这个函数的主体来支持这一点:调用者现在可

考虑以下透视投影矩阵,该矩阵仅在调用方给定的垂直视野和纵横比下工作(非常好):

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?

这应该可以:

  • 使用水平视场和到近平面的距离计算宽度(提示:有一个直角三角形,边
    宽度/2
    和角度
    fovx/2
  • 使用宽度和纵横比计算高度
  • 使用高度和到近平面的距离计算垂直视野(提示:有一个直角三角形,边
    高度/2
    和角度
    视野/2