【问题标题】:How to calculate xyz camera position with xy angles and distance in Three.js?如何在 Three.js 中使用 xy 角度和距离计算 xyz 相机位置?
【发布时间】:2023-03-23 09:23:01
【问题描述】:

我正在尝试从 2 个轴角(以度为单位)和距离计算 XYZ 位置(对于相机)。

我尝试基于this article实现一些东西,问题是它需要之前的XYZ位置来进行计算。

例如:

function calcPositionFromOrbit(xAngle, yAngle, distance) {
    // ...
}

// Front
calcPositionFromOrbit(0, 0, 100); // {x:0, y:0, z:-100}
calcPositionFromOrbit(360, 0, 100); // {x:0, y:0, z:-100}
calcPositionFromOrbit(0, 360, 100); // {x:0, y:0, z:-100}

// Above
calcPositionFromOrbit(0, 90, 100); // {x:0, y:100, z:0}

// Behind
calcPositionFromOrbit(0, 180, 100); // {x:0, y:0, z:100}
calcPositionFromOrbit(180, 0, 100); // {x:0, y:0, z:100}

// Under
calcPositionFromOrbit(0, -90, 100); // {x:0, y:-100, z:0}
calcPositionFromOrbit(0, 270, 100); // {x:0, y:-100, z:0}

// Left
calcPositionFromOrbit(90, 0, 100); // {x:100, y:0, z:0}

// Top Left
calcPositionFromOrbit(45, 45, 100); // {x:70.7..., y:70.7..., z:0}

附注我对OrbitControls'的解决方案不感兴趣。

【问题讨论】:

    标签: javascript three.js


    【解决方案1】:

    您提到的文章是关于(顶部的第一段):

    这使用户可以用鼠标沿着 球体的表面,因此相机始终指向中心。 在球体的中心有一个物体,可以从各个角度直观地观察到。

    因此您需要使用球坐标系在球体上找到点。您可以使用以下公式来做到这一点(我假设球心在 c=[0,0,0] 点)(来源:wiki):

    其中 r 是球体半径,角度 θ 在 [0, π) 中,φ 在 [0, 2π) 中

    【讨论】:

    • 太棒了!有用 !我还有一个小问题:如果相机间距高于顶部(> 180°),camera.lookAt(center) 使它在 Y 轴上转动,但不会倒置。我怎样才能旋转相机,让它看起来也颠倒了?
    • @Tot 我认为您可以通过更改 up vector camera.up 围绕视口中心旋转相机。但是它可能不是微不足道的(重新实现lookAt函数并使用quaterions旋转或使用this "implementation"?)所以你不能让pitch获得等于或大于180度的值。
    • “只是不允许音高获得等于或大于 180 度的值” > 这就是我不想使用 OrbitControls 的原因之一。 x) 也许在调用lookAt函数后改变向上向量会起作用。
    • @Tot 是的,但这是一个单独的问题,您可以在 stackoverflow 上提出/找到它
    猜你喜欢
    • 2021-05-10
    • 2019-06-22
    • 1970-01-01
    • 1970-01-01
    • 2014-05-15
    • 1970-01-01
    • 2019-02-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多