当前位置: 首页 > 知识库问答 >
问题:

三js摄像头。旋转y到360度转换

宦高岑
2023-03-14

我正在尝试旋转一个与这三个元素相关的2D对象(在GTA风格的小地图覆盖中)。js摄像机旋转。我的3D场景中的y值。

问题是相机返回的弧度。旋转y值有点奇怪,从0开始

有人知道如何将这些值转换或翻译成360个坐标吗?

我用的是透视相机和轨道控制

提前谢谢!

共有3个答案

唐焕
2023-03-14

camera.rotation是一个所谓的欧拉角,您也可以在three.js文档中阅读THREE. Object3D(这是THREE. Camera类的基类)。您不能简单地从欧拉角直接获得与某个轴的角度,因为您获得的角度取决于欧拉的顺序。

弓方伟
2023-03-14

如果你设定

camera.rotation.order = "YXZ"

(默认值为“XYZ”)欧拉角对您来说更有意义:

旋转。y将是以弧度为单位的相机航向

旋转。x将是摄像机的俯仰角,以弧度为单位

旋转。z将是摄像机的滚动弧度

轮换将按此顺序进行。

有关更多信息,请参阅此答案。

三js r.84

彭朝
2023-03-14

我认为这可能与四元数旋转的转换有关。不确定下面的例子是否正确,但它可能有助于您找到解决方案。

const euler = new THREE.Euler();
const rotation = euler.setFromQuaternion(camera.quaternion);
const radians = rotation.z > 0
    ? rotation.z
    : (2 * Math.PI) + rotation.z;
const degrees = THREE.Math.radToDeg(radians);

这会导致的值从0到360,但随着相机旋转,角度值似乎以不一致的速率变化。

下面是一个代码笔,演示了这种行为:

http://codepen.io/kevanstannard/pen/NdOvoO/

我使用了以下问题中的一些细节:

three.js透视摄像电流角度(度数)

编辑#1

根据@WestLangley的答案,我上面的答案是不正确的,所以为了记录改进,这里有一些基于West解决方案的代码:

// Set Y to be the heading of the camera
camera.rotation.order = 'YXZ';

然后

const heading = camera.rotation.y;
const radians = heading > 0 ? heading : (2 * Math.PI) + heading;
const degrees = THREE.Math.radToDeg(radians);

还有更好的密码笔

http://codepen.io/kevanstannard/pen/YNJgXd

 类似资料:
  • 我正在尝试创建一个脚本,允许我通过水平滑块在0°-360°(y轴)范围内旋转相机,带有Slerp效果。相机只沿着一个轴旋转(我在一个房间的中间,我必须使用水平滑块转身) 我制作了两个脚本:第一个应用于参考立方体以获得旋转,第二个应用于腔室以获得Slerp效果,同时跟踪立方体的旋转。 360°立方体旋转脚本: 具有Slerp效果的摄像机旋转脚本: 它可以工作,但有一些问题:如果我从左(0°)到右(3

  • 我正在尝试围绕我的模型旋转我的透视相机。模型位于中心(0,0,0)点。这是我的旋转相机方法: 我试着去中心,旋转5度,然后回到同样的距离。然而,旋转似乎不起作用,我不知道为什么,任何帮助都非常感谢。

  • OpenGL总是围绕(0,0,0)旋转。但是我需要绕着相机旋转。我知道在GL中,没有相机,但是如果我翻译回(0,0,-6.0),它会绕着(0,0,0)旋转,而不是绕着(0,0,-6.0)旋转 所以我的问题是:如何在opengl和c中设置旋转中心 我已经找到了这篇文章:OpenGL围绕一个点旋转相机 显示此解决方案的地方: 旋转函数通常围绕原点旋转。要围绕另一个点P旋转,必须:平移(-P)旋转平移(

  • 在我的应用程序中,用户从相机捕获图像或从图库中选择图像,然后将其转换为pdf并上载到服务器,现在我的问题是,从相机捕获的图像在某些设备上旋转,我有代码尝试解决此问题,但它不起作用 任何建议或问题在哪里,没有错误代码或任何东西

  • 我是新来的反应js。我试图通过单击箭头键旋转图像。有人帮我,也分享一些学习反应js留档。 提前感谢。 我的代码 .js .module.css

  • 我正试着写一个程序,把华氏温度转换成摄氏温度。用户输入华氏温度值,程序打印出摄氏温度值。用户应该输入212作为华氏温度值,程序应该计算100.0作为摄氏温度值,但是当我想要得到100.0时,我却得到0.0作为摄氏温度值 我不确定问题可能出在哪里。操作顺序是可能的吗? 将摄氏温度转换为华氏温度的公式为:< code>C = 5 / 9 (F - 32)