适合场景到屏幕
OpenGL: Fit scene to screen
本文关键字:屏幕 更新时间:2023-10-16
我有一个带有透视投影的3D场景。
我想根据边界框(min
和max
)将场景适配到屏幕上。
我设置了这样的场景居中:
glm::vec3 center = (min + max) / 2.0f;
rootNode->translate(-center.x, -center.y, -center.z);
现在我需要一个缩放因子来缩放我的rootNode以适应屏幕。我该怎么做呢?
(this: 8.070)如何自动计算显示整个模型的视图?(我知道边界球和向上向量)没有帮助,因为它基于正交投影)
这个问题在透视投影中比在正交投影中更难的原因是,你需要的min
和max
在透视投影中不是恒定的。
在透视投影中,当你离开相机时,可见区域的两个边缘之间的距离会增加。
对于透视投影,你通常有一个视角,theta
,一个相机位置,和一个"看"向量,v
。在距离摄像机位置(在v
的方向上)d
的任意距离上,你可以想象一个法线为v
的平面。这个平面中你的相机可以"看到"的区域的宽度为:
2 * d * tan(theta / 2).
在一个简单的固定相机设置中,你可能将相机放在原点并向下看z轴,然后任何点的距离d
将只是该点的z
坐标。
还请注意,您可能有不同的水平和垂直视角。如果你设置了垂直视场角度"fovy"和纵横比(视口宽度/视口高度),那么你的水平视场角度是垂直视场角度乘以纵横比。
相关文章:
- UE4-如何在给定4个屏幕坐标的情况下缩放纹理或材质
- 如何在GTK程序运行时禁用屏幕保护程序/电源管理/屏幕消隐
- 使用 SFML 和 C++ 将 Pixel 打印到屏幕上
- 在 Windows 8/10 技术中完全实时的屏幕捕获,没有延迟
- Winapi:屏幕截图未显示在窗口中
- 如何在快板的屏幕中显示子位图的绘制?
- 按回车键后输出屏幕关闭
- 要在屏幕上绘制一些小瓷砖,我应该使用 QQuickItem 还是 QQuickPaintedItem?
- SFML 向下移动时如何围绕屏幕中心旋转?
- 截取屏幕截图后程序卡住
- C++鼠标单击时的屏幕截图不起作用
- 屏幕插入运算符<<的运算符过载问题
- 获取网格中心的屏幕位置
- SFML 中的字体.信息不显示在屏幕上.显示的不是信息,而是点
- 如何在屏幕上环绕x和y?
- GetDIBits 在屏幕捕获函数中多次迭代后返回零
- OpenGL ES 2.0将纹理绘制到屏幕上是行不通的
- GTKMM:拍摄绘图区域的屏幕截图?
- OpenGL - 添加第二个着色器属性会导致空白屏幕
- 使用 C++将文本光标移动到屏幕中不可见的行