【问题标题】:Threejs compass based on camera rotationThreejs指南针基于相机旋转
【发布时间】:2026-02-07 12:05:02
【问题描述】:

我想做一个像 Facebook 上的指南针: Click here for image

FOV(罗盘中间的饼图)将根据相机的 FOV 旋转。我有相机的 x、y 和 z 旋转,但我想知道如何将其转换为 2d 圆形视图?此外,three.js 相机的 y 旋转仅从 -PI / 2 变为 PI / 2

非常感谢任何帮助:)

【问题讨论】:

  • 欢迎来到 SO。问题的哪一部分你不知道怎么办?显示代码的相关部分。

标签: javascript 3d three.js


【解决方案1】:

使用 THREE.Spherical() 解决了同样的问题

var vector = new THREE.Vector3();
var center = new THREE.Vector3();
var spherical = new THREE.Spherical();
vector.copy( camera.position ).sub( center );
spherical.setFromVector3( vector );
var rot = spherical.theta;
$('#compassSVG > svg')[0].style.transform = 'rotate('+ rot +'rad)';

【讨论】:

  • 这是一个很好的答案!在大多数情况下需要。如果使用常用的轨道控制,它可能会被简化,其中球面θ可以通过 controls.getAzimuthalAngle()
  • 这对我帮助很大。谢谢!