如何在Three.js中使用xy角度和距离计算xyz相机位置?

时间:2019-02-10 21:28:25

标签: javascript three.js

我正在尝试从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}

P.S。我对OrbitControls的解决方案不感兴趣。

1 个答案:

答案 0 :(得分:0)

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

  

这使用户可以用鼠标沿摄像机移动摄像机。   球体的表面,因此摄影机始终指向中心。   在球体的中心,可以从各个角度直观地观察对象。

因此,您需要使用球坐标系在球上找到点。您可以使用以下公式(假设球心在点c = [0,0,0]中)进行操作(源:wiki):

enter image description here

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