[英]OpenGL: Fit scene to screen
我有一個帶有透視投影的3D場景。
我想根據邊界框( min
和max
)將場景調整到屏幕。
我把我的場景集中在這里:
glm::vec3 center = (min + max) / 2.0f;
rootNode->translate(-center.x, -center.y, -center.z);
現在我需要一個比例因子來縮放我的rootNode以適應屏幕。 我該怎么做呢?
(這: 8.070如何自動計算顯示整個模型的視圖?(我知道邊界球和向上矢量。)沒有幫助,因為它基於正交投影)
使用透視投影比使用正交投影更難以解決這個問題的原因是,您需要的min
和max
與透視投影不一致。
使用透視投影,當您遠離相機時,可見區域的任一邊緣之間的距離會增加。
通過透視投影,您通常具有視角theta
,攝像機位置和“看”矢量v
。 在任何距離, d
從相機的位置(在v
的方向)你可以想象一個正常為v
的飛機。 您的相機可以“看到”的此平面區域具有寬度:
2 * d * tan(theta / 2).
在簡單的固定攝像機設置中,您可能將攝像機放在原點並向下看z軸,然后任何點的距離d
將只是點的z
坐標。
另請注意,您可能具有不同的水平和垂直視角。 如果您設置了垂直視角“fovy”和縱橫比(視口寬度/視口高度),那么您的水平視角是您的垂直視角角度乘以縱橫比。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.