• 陀螺仪操作摄相机,可以旋转,但角度(轴)还不对


    不容易啊,搞了好几天,几乎重看了一遍,3d数学基础,写的不对的一定得指出来哦, 原贴地址:http://blog.csdn.net/wzq9706/article/details/7415846

    可以旋转,但角度(轴)还不对(x轴除外)

    -(void)update:(ccTime)time {
        
        CCCamera *cam = [self camera];
        
        if (nil == cam) {
            NSLog(@"Call Camera faild!");
            return;
        }
        
        Document* doc = [Document sharedDocument];
        
        kmVec3 center = {0, 0, -1}; 
        kmVec3 eye = {0, 0, 0};
        kmVec3 up = {0, 1, 0};
        
        //kmVec3Subtract(¢er, &eye, ¢er);
        
        // 得到陀螺仪数据
        float yaw = (float)(CC_RADIANS_TO_DEGREES(doc.motionManager.deviceMotion.attitude.yaw));
        float pitch = (float)(CC_RADIANS_TO_DEGREES(doc.motionManager.deviceMotion.attitude.pitch));
        float roll = (float)(CC_RADIANS_TO_DEGREES(doc.motionManager.deviceMotion.attitude.roll));
        
        // 构建摄相机矩阵
        kmMat4 camMat;
        kmMat4Identity(&camMat);
        
        // 构建旋转矩阵
        kmQuaternion vec4;
        kmMat4 rotaMat;
        kmQuaternionRotationYawPitchRoll(&vec4, yaw, pitch, roll);
        kmMat4RotationQuaternion(&rotaMat, &vec4);
        
        // 构建平移矩阵
        kmMat4 transMat;
        kmMat4Translation(&transMat, 0, 0, 100);
        
        // 矩阵变换
        kmMat4Multiply(&camMat, &camMat, &rotaMat);
        kmMat4Multiply(&camMat, &camMat, &transMat);
        
        // 用最终的矩阵变换相应的点
        kmVec3Transform(¢er, ¢er, &camMat);
        kmVec3Transform(&up, &up, &camMat);
        kmVec3Transform(&eye, &eye, &camMat);
        
        [cam setEyeX:eye.x eyeY:eye.y eyeZ:eye.z];
        [cam setCenterX:center.x  centerY:center.y centerZ:center.z];   
        [cam setUpX:up.x upY:up.y upZ:up.z];
    }


  • 相关阅读:
    面试开发需要准备的
    多线程 多进程
    TCP/IP协议学习
    深信服算法岗实习面试经验
    TZOJ4777: 方格取数
    Python 基于 NLP 的文本分类
    mac os 使用记录
    字节跳动游戏开发岗题目
    mac进行acm(C/C++)编程
    常用的正则表达式(转)
  • 原文地址:https://www.cnblogs.com/iapp/p/3631819.html
Copyright © 2020-2023  润新知