我正在尝试从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的解决方案不感兴趣。
答案 0 :(得分:0)
您提到的文章是有关(顶部的第一段):
这使用户可以用鼠标沿摄像机移动摄像机。 球体的表面,因此摄影机始终指向中心。 在球体的中心,可以从各个角度直观地观察对象。
因此,您需要使用球坐标系在球上找到点。您可以使用以下公式(假设球心在点c = [0,0,0]中)进行操作(源:wiki):
其中r是球体半径,角度θ在[0,π)中,而φ在[0,2π)