小编Jes*_*ese的帖子

SceneKit - 映射物理360度旋转

我很难将设备运动(传感器融合)映射到SceneKit节点旋转.问题的前提如下,

我有球体,并且相机定位在球体内部,使得球体的几何中心和相机节点的中心重合.我想要实现的是当我围绕一个点物理旋转时,运动也需要准确地映射到相机上.

实施细节如下:

我有一个节点,一个球体作为几何,并且是一个子节点.我正在使用传感器融合来获得姿态四元数,然后将它们转换为欧拉角.代码是:

- (SCNVector3)eulerAnglesFromCMQuaternion:(CMQuaternion) {
    GLKQuaternion gq1 =  GLKQuaternionMakeWithAngleAndAxis(GLKMathDegreesToRadians(90), 1, 0, 0);
    GLKQuaternion gq2 =  GLKQuaternionMake(q.x, q.y, q.z, q.w);
    GLKQuaternion qp  =  GLKQuaternionMultiply(gq1, gq2);
    CMQuaternion rq =   {.x = qp.x, .y = qp.y, .z = qp.z, .w = qp.w};
    CGFloat roll = atan2(-rq.x*rq.z - rq.w*rq.y, .5 - rq.y*rq.y - rq.z*rq.z);
    CGFloat pitch = asin(-2*(rq.y*rq.z + rq.w*rq.x));
    CGFloat yaw = atan2(rq.x*rq.y - rq.w*rq.z, .5 - rq.x*rq.x - rq.z*rq.z);
    return SCNVector3Make(roll, pitch, yaw);
}
Run Code Online (Sandbox Code Playgroud)

转换方程式来自 3D Math Primer for Graphics …

objective-c quaternions euler-angles core-motion scenekit

18
推荐指数
2
解决办法
5922
查看次数

static关键字如何在内部工作?

static关键字如何在内部运作?考虑到基本定义static variable is initialized only once,run-time或者compile时间如何根据执行流程来解释它?考虑代码段:

void function()
   {
      static int count=0;
      count++;
   }
main()
    {
       for(int i=0;i<=10;i++)
          function();
    }
Run Code Online (Sandbox Code Playgroud)

该行 static int count=0;只执行一次,而迭代中的行i=0是我能想到的最佳解释.它是正确的还是以其他方式工作?

内存中存储的是静态变量stack还是heap

也有一些所谓static objectObjective-C?如果它与普通物体有什么不同?

c objective-c

0
推荐指数
1
解决办法
518
查看次数