![]() |
1
2
更新:见下文。 既然你有视图和投影矩阵,这里有一种方法可以做到,尽管它可能不是最短的:
但是,是的,就像布兰多夫说的,如果你能保存相机的变量,比如佛维,那就容易多了。-) 更新: 上面有一个更有效的变体:对投影矩阵求逆。使用它可以将视区边缘转换回视图空间。那么你就不必把每一个框都投影到屏幕坐标中。 更好的是,对视图矩阵做同样的操作,并将相机截锥转换回世界空间。这对于比较多个方框会更有效率,但很难搞清楚数学。 |
|
2
3
我参加这个聚会有点晚了。但我在研究同一个问题时遇到了这个问题。我花了一天的时间研究这个问题,并在这里找到了一些优秀的文章: http://www.antongerdelan.net/opengl/virtualcamera.html 我最终从投影矩阵开始向后工作。我和你在上面的帖子里提到的公式一样。(其中cot(x)=1/tan(x))
(其中d是从相机到目标边界球的距离) 我用这种方法来确定我用来旋转物体的假想轨迹球的半径。 btw florian,您可以从投影矩阵中提取fovy,如下所示: 如果从投影矩阵中提取sy分量,如下所示:
(您可以在我上面链接的页面上找到这些定义) 如果在上面的sy eqn中替换范围,则可以得到:
重新排列:
取两边的arctan(tan的倒数),我们得到:
所以,
不确定你是否还在乎——已经有一段时间了!-但也许这能帮助其他人。 |
![]() |
3
1
你链接上的答案
另一种解决方案可能是使用 立体角 球的。在天空中球体所对的立体角基本上是 地区 当投影到单位球体时,它会覆盖。
公式如下: this link 但大致上我要做的是:
计算出的数字大致与
我不确定是否能轻易地找到对截锥立体角的更好估计。这种方法涉及的复杂性比
|
![]() |
4
0
FOV不是直接存储在投影矩阵中,而是在调用GluPerspective来构建生成的矩阵时使用。 最好的方法是简单地将所有摄像机变量保存在它们自己的类中,例如一个截锥类,当您调用GluPerspective或类似的类时,将使用它们的成员变量。 也许有可能把这辆雪佛兰从矩阵中拿出来,但我对所需要的数学一无所知。 |
![]() |
Jimmy Yang · 何时需要进行透视分割? 2 年前 |
![]() |
Max Mister · 使用鼠标事件计算相机的位置和旋转 6 年前 |
![]() |
Lane will · OpenGL选择区域 6 年前 |
![]() |
synchronizer · openGL 2D视差滚动纹理撕裂/接缝 6 年前 |
![]() |
Steven Venham · OpenGL单通道到多通道的可行性 6 年前 |
![]() |
Andrew Lundgren · 如何在OpenTK(迷你地图!) 6 年前 |
![]() |
Kevin Su · 无法在opengl中正确绘制我的汽车 6 年前 |
![]() |
user1832287 · 来自细分控制点的边上的瑕疵 6 年前 |