opengl - 透视投影矩阵 : how to calculate vertical FoV from just horizontal FoV and aspect-ratio?

标签 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. 使用水平视场和到近平面的距离计算宽度(提示:有一个直角三角形,其边为 nearwidth/2 以及角度 fovx/2)。
  2. 使用宽度和纵横比计算高度。
  3. 使用高度和到近平面的距离计算垂直 FOV(提示:有一个直角三角形,其边为 nearheight/2 以及角度 fovy/2)。

关于opengl - 透视投影矩阵 : how to calculate vertical FoV from just horizontal FoV and aspect-ratio?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13429173/

相关文章:

c++ - GLFW 窗口 glfwSwapBuffers() 真的很慢吗?

c++ - DX11 OpenGL 互操作 : can't copy buffer

ios - iOS 应用程序中的 3D 对象

c++ - 如何为 LookAt 转换获取正确的 Up vector ?

c++ - 计算立方体/长方体的边界框/缺失点

用于 OpenGL 的 Android 传感器

performance - 列出所有 n 对整数的最快解决方案?

java - GLSL 统一变量未更新

android - 翻译用于绘制位图的矩阵时,它会绘制多个位图

c++ - 使用 glDrawArrays() 时如何获取 VBO 的长度以渲染所有顶点?