【问题标题】:ScenKit eulerAngles strange values during rotationSceneKit euler 旋转期间角度奇怪的值
【发布时间】:2015-11-14 14:10:31
【问题描述】:

我正在使用以下几行旋转 SCNNode:

 let rotate = SCNAction.rotateByAngle(CGFloat(M_PI), aroundAxis:SCNVector3Make(0, 1, 0), duration: NSTimeInterval(10.0))
    let repeat = SCNAction.repeatActionForever(rotate)
    node.runAction(repeat)

我在渲染方法中打印节点的eulerAngles.y:

let rad = Double(node.eulerAngles.y)        
var angleInDegrees = fmodf(360.0 + -Float(rad) * (180.0 / Float(M_PI)), 360.0)
println("eulerAngles.y rad:\(rad) degree:\(angleInDegrees)")

但我在旋转过程中得到奇怪的值,如下所示:

...
eulerAngles.y rad:-1.38788688182831 degree:79.5201
eulerAngles.y rad:-1.40567290782928 degree:80.5391 
eulerAngles.y rad:-1.4227991104126 degree:81.5204
eulerAngles.y rad:-1.44030773639679 degree:82.5236
eulerAngles.y rad:-1.45790004730225 degree:83.5315
eulerAngles.y rad:-1.47438871860504 degree:84.4763
eulerAngles.y rad:-1.49130213260651 degree:85.4453
eulerAngles.y rad:1.57079637050629 degree:270.0
eulerAngles.y rad:1.57079637050629 degree:270.0
eulerAngles.y rad:1.57079637050629 degree:270.0
eulerAngles.y rad:1.57079637050629 degree:270.0
eulerAngles.y rad:1.57079637050629 degree:270.0
eulerAngles.y rad:1.57079637050629 degree:270.0
eulerAngles.y rad:1.57079637050629 degree:270.0
eulerAngles.y rad:1.57079637050629 degree:270.0
eulerAngles.y rad:-1.49359321594238 degree:85.5766
eulerAngles.y rad:-1.47716772556305 degree:84.6355
...

我不明白为什么要打印 270。你能给我解释一下吗,或者还有其他方式 得到节点的正确角度?

【问题讨论】:

    标签: swift rotation angle scenekit


    【解决方案1】:

    这就是欧拉角的工作原理。他们有两个怪癖(我将xyz 分别称为pitchyawroll):

    • rollyaw随着逆时针旋转从0增加到π(180度)然后跳到-π(-180度)并随着旋转完成一个圆圈继续增加到0;但是pitch 增加到 π/2(90 度)然后减小到 0,然后减小到 -π/2(-90 度)并增加到 0。

    • 值在某些方向上变得不准确。特别是当pitch 为±90 度时,rollyaw 变得不稳定。请参阅wikipedia article on gimbal lock

    【讨论】:

    • 谢谢,为了知道角度也有一些近似值的解决方案?当节点指向 North、South、East 和 Ovest 时,我想触发一个事件(使用 NSNotificationCenter)。
    • 嗯,这就是为什么有一个rotation 属性和一个orientation 属性。
    猜你喜欢
    • 2012-03-04
    • 2012-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-27
    • 2019-04-04
    相关资源
    最近更新 更多