首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将联合转换转换为THREE.js旋转

将联合转换转换为THREE.js旋转
EN

Stack Overflow用户
提问于 2013-08-05 19:53:39
回答 3查看 4.8K关注 0票数 8

如何将THREE.js摄像机或物体的旋转与来自统一GameObject的转换相匹配?

统一使用一个具有ZXY欧拉顺序的左手系统.THREE.js使用一个带有XYZ顺序的右撇子系统.

要将GameObject.transform.rotation (四元数)转换为Object3D.rotation (THREE.Vector3),需要进行哪些转换?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-08-07 16:50:36

最后,我们按照以下方式解决了这个问题:

假设您从统一的四元数中得到qxqyqzqw,我们将在JavaScript /Three.JS中应用下面的转换:

代码语言:javascript
复制
// convert Quaternion from Left-handed coordinate system to Right-handed

var q = new THREE.Quaternion( -qx, qy, qz, -qw );

var v = new THREE.Euler();  
v.setFromQuaternion( q );

v.y += Math.PI; // Y is 180 degrees off

v.z *= -1; // flip Z

object.rotation.copy( v );

在所有轴的旋转和方向上正确工作。

three.js r.59号

票数 8
EN

Stack Overflow用户

发布于 2018-10-26 21:23:58

关键是匹配模型的初始加载位置之间的单位和三个is。接受的答案可能只适用于其中一场比赛,但不适用于所有比赛。

以下是两个例子:

示例1:单元初始加载位置为x-左、y-向上和z-正向。

要转换为three.js:

位置:翻转x,因为那是唯一不同的轴。

旋转:如果有四元数,将其转换为Euler,然后翻转旋转的y和z分量,然后将顺序设置为"ZXY“。我们要翻转y和z的原因是,在这个样本中,单位和三个y和z轴是在相同的方向上旋转的,所以它们在相反的方向旋转;翻转确保它们在相同的方向旋转。顺序被设置为"ZXY“,因为这是顺序单位是旋转的。

示例2:单元初始加载位置为x-右、y-向上和z-向后。

要转换为three.js:

位置:翻转z,因为那是唯一不同的轴。

旋转:四元数->欧拉,翻转x,y,设置顺序为"ZXY“。和上面的推理一样。

正如您可以从这两个例子中看到的,模型的起始位置以单位和three.js的形式影响着我们如何转换它们之间的位置和旋转。

票数 5
EN

Stack Overflow用户

发布于 2013-08-05 20:07:37

如果将这两种旋转转换为四元数,我认为区别是X轴上的a -1标度。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18066581

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档