【问题标题】:calculate camera fov distance for sphere计算球体的相机 fov 距离
【发布时间】:2014-03-19 08:35:12
【问题描述】:

我试图计算相机可以放大球体的最大距离,同时仍将所有球体显示在屏幕上。

var dist =  diameter / (2 * Math.tan( camera.fov * (Math.PI/180) / 2 ));

这会放大很多。球体的顶部和底部被剪裁。 我做错了什么?

fiddle

【问题讨论】:

    标签: javascript three.js


    【解决方案1】:

    球体被剪裁的原因与如果你站在一个大球体附近你看不到它的“北极”一样。

    您需要计算通过球体而不是球心的平面。

    因此,您计算的数量是到球体的最小距离。到其中心的最小距离是您计算的数量加上球体的半径。

    (注意:由于球体的曲率,这将产生一个保守的近似值。)

    编辑:好的,这是确切的答案。

    var dist =  radius / ( Math.sin( camera.fov * ( Math.PI / 180 ) / 2 ) );
    

    小提琴:http://jsfiddle.net/x98Fk/3/

    three.js 相机的视野是垂直 FOV,所以这是垂直方向的结果。如果窗口比宽度窄,那么你必须处理这个问题。

    【讨论】:

    • 如果我计算到其中心的最小距离,那不会使相机放大更多,导致剪辑增加吗?
    • 我用 jsfiddle 示例更新了问题。如果您单击球体,它应该使用我的计算放大。你能告诉我你的意思吗?
    • 对于立方体的计算是精确的:jsfiddle.net/x98Fk/2。球体的曲率使问题成为几何问题。 FOV 越小,近似值就越准确。
    • 这确实有效,因为 sine 计算由 切线 形成的三角形的斜边
    猜你喜欢
    • 1970-01-01
    • 2019-11-26
    • 1970-01-01
    • 1970-01-01
    • 2010-11-20
    • 1970-01-01
    • 1970-01-01
    • 2021-12-02
    • 1970-01-01
    相关资源
    最近更新 更多