首页 > 解决方案 > 如何在 Three.js 中使用 xy 角度和距离计算 xyz 相机位置?

问题描述

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

我尝试根据这篇文章实现一些东西,问题是它需要之前的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}

PS 我对OrbitControls的解决方案不感兴趣。

标签: javascriptthree.js

解决方案


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

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

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

在此处输入图像描述

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


推荐阅读