是否可以通过具有较小 FoV 的平截头体/走廊/孔“查看”以例如 60 度垂直 FoV 渲染的 OpenGL 场景 - 并填充生成的投影平面?
我认为这与“放大”不同。
背景:
我在这里为光学透视 AR 显示器使用 OpenGL 变换管道而苦苦挣扎。可能是我对我的设置的 OpenGL 转换管道真正需要混合的内容有所了解......我正在创建图形,当通过 AR 眼镜覆盖时,这些图形旨在正确地显示在现实世界中。眼镜在 3D 空间中被正确跟踪。为了渲染图形,我使用的是 OpenGL 的传统固定函数管道。结果很好,但我一直在努力解决注册错误,这些错误似乎源于我的组合glFrustum()
加上glLookAt()
没有正确地重新创建“透视印象”。
这些 AR 显示器通常不会填满佩戴者的整个视野,但显示区域看起来像一个漂浮在空间中的较小“窗口”,通常在用户前方约 3-6 英尺处,与头部运动有关。
在 OpenGL 中,我使用与Bourke非常相似的布局,其中(我希望我总结正确)显示器的纵横比(例如 4:3)与 windowwidth 和 windowheight 定义了垂直视野。因此,FoV 与窗口尺寸和 OpenGL 使用的“变换平截头体”形成了固定链接——而我需要结合两个平截头体(?):
我的理解是,必须使用与人眼“参数”相当的参数来渲染 OpenGL 场景才能匹配——因为 AR 眼镜允许用户看穿。假设人眼的焦距为 22 毫米(Clark, RN Notes on the Resolution and Other Details of the Human Eye. 2007.),眼睛的“传感器尺寸”为 16 毫米宽 x 13 毫米高(我的估计)。计算出的垂直 FoV 约为 33 度 - 我们将其输入 OpenGL 管道。
这种管道的输出将是我得到一个充满这个“视图”的应用程序窗口,或者我可以获得一个缩小版本的 if,这取决于我的glViewport
设置。
但是由于 AR 眼镜只需要输入人类佩戴者整个视野的一个子部分,一个“较小的窗口”,我想我需要一种方法来“查看”整体的一个较小的子区域渲染场景 - 好像我正在通过一个小洞看场景。这些具有“显示窗口”的眼镜提供了大约 20 度以下的垂直视野——但将其输入 OpenGL 管道是错误的。那么,我该如何组合这些相互冲突的 FoV?...还是我在这里走错了路?