使用 Scenekit,如何获得身份四元数?

Posted

技术标签:

【中文标题】使用 Scenekit,如何获得身份四元数?【英文标题】:Using Scenekit, how can I get an identity quaternion? 【发布时间】:2018-02-17 14:16:09 【问题描述】:

啊,那就继续吧。

我想创建一个SCNTransformConstraint 方向约束,以便SCNNode 始终面向世界的 x、y 和 z 轴,无论节点的父节点如何定位/移动。

我可以像这样在世界空间中创建方向约束:

let orientationConstraint = 
SCNTransformConstraint.orientationConstraint(inWorldSpace: true) 
  (node, orientation) -> SCNQuaternion in
  return <<<need quaternion identity here>>>


node.constraints = [orientationConstraint]

但我需要通过约束回调来提供multiplicative identity 四元数。当像场景套件那样使用quaternions to describe orientation and rotation 时,四元数身份表示没有旋转。或者与世界对齐的世界坐标中的方向。

这类似于按 1 缩放得到相同比例的方式。并且将比例设置为 1 会将某些内容重置为没有缩放。

对于场景套件矩阵,有SCNMatrix4Identity。或者,场景工具包向量的加法标识:SCNVector3Zero

如何获得乘法的四元数身份?

【问题讨论】:

到目前为止你尝试了什么? SO 是一个解决更具体问题的地方(即您的代码不起作用) 我可以用一个问题烧掉我所有的声誉吗?那会是一些东西。 嗯,你会没事的,我喜欢幽默,毕竟是星期五,但为了质量起见,让我还链接到 MSE post,它解释了标题应该传达什么以及应该是什么在身体里。保重。 :-) 谢谢@rene,周末愉快! 【参考方案1】:

似乎没有SCNQuaternionIdentity

身份四元数可以用SCNQuaternion(0, 0, 0, 1) 构造。

注意不要使用默认构造函数SCNQuaternion()。它相当于SCNQuaternion(0, 0, 0, 0),它不代表一个有效的方向。

【讨论】:

以上是关于使用 Scenekit,如何获得身份四元数?的主要内容,如果未能解决你的问题,请参考以下文章

如何将欧拉角转换为四元数并从四元数中得到相同的欧拉角?

当提供轴和四元数时,我如何获得 GLM 的角度?

Unity四元数

Unity四元数

Unity四元数

使用四元数计算 iphone 的偏航、俯仰和滚动?