考虑以下透视投影矩阵,它仅适用于调用者给出的垂直视野和纵横比(非常好):
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?
最佳答案
这应该有效:
- 使用水平视场和到近平面的距离计算宽度(提示:有一个直角三角形,其边为
near
和width/2
以及角度fovx/2
)。 - 使用宽度和纵横比计算高度。
- 使用高度和到近平面的距离计算垂直 FOV(提示:有一个直角三角形,其边为
near
和height/2
以及角度fovy/2
)。
关于opengl - 透视投影矩阵 : how to calculate vertical FoV from just horizontal FoV and aspect-ratio?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13429173/