javascript - 如何在 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的解决方案不感兴趣。
解决方案
您提到的文章是关于(顶部的第一段):
这使用户能够使用鼠标沿球体表面移动相机,从而相机始终指向中心。在球体的中心有一个物体,可以从各个角度直观地观察到。
因此,您需要使用球坐标系在球体上找到点。您可以使用以下公式来做到这一点(我假设球心在 c=[0,0,0] 点)(来源:wiki):
其中 r 是球体半径,角度 θ 在 [0, π) 中,φ 在 [0, 2π) 中
推荐阅读
- c# - UseInMemoryDatabase 是否可以自动递增 id?
- javascript - 循环时如何访问数组元素子元素?
- javascript - 如何在没有任何 Javascript 的情况下将 Excel 2016 文件/表格保存为 HTML 文件/表格?
- spring - 升级到云父后,maven 发布过程出错
- node.js - Node.js:将插入的行从 PostgreSQL v.11 返回到浏览器
- java - 在独立库中使用 Feign 与 Springboot 应用程序
- python - 如何应用经过训练的神经网络?
- javascript - 如何在 JS 对象之间共享 websocket 连接?
- c# - 跨多个区域的单例时间触发 Azure 函数
- python - 如何在没有内存问题的情况下在 python 中读取大 XML 文件