iOS SceneKit欧拉角转四元数

使用欧拉角

    self.shipNode.eulerAngles = SCNVector3Make(pitch, -yaw, -roll);

使用欧拉角会造成万向锁,转成四元数就没有问题了

    float fCosHRoll = cos(-roll * .5f);
    float fSinHRoll = sin(-roll * .5f);
    float fCosHPitch = cos(pitch * .5f);
    float fSinHPitch = sin(pitch * .5f);
    float fCosHYaw = cos(-yaw * .5f);
    float fSinHYaw = sin(-yaw * .5f);
 
    float w = fCosHRoll * fCosHPitch * fCosHYaw + fSinHRoll * fSinHPitch * fSinHYaw;
    float x = fCosHRoll * fSinHPitch * fCosHYaw + fSinHRoll * fCosHPitch * fSinHYaw;
    float y = fCosHRoll * fCosHPitch * fSinHYaw - fSinHRoll * fSinHPitch * fCosHYaw;
    float z = fSinHRoll * fCosHPitch * fCosHYaw - fCosHRoll * fSinHPitch * fSinHYaw;
 
    
    self.shipNode.orientation = SCNVector4Make(x, y, z,w);
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容