美文网首页
AR之—悬空指南针

AR之—悬空指南针

作者: 口子窖 | 来源:发表于2018-07-16 18:34 被阅读54次
悬浮的指南针.gif
新建CLLocationManager并设置代理
@property(nonatomic , strong) CLLocationManager *locationManager;//定位管理器

- (void)viewDidLoad {
    [super viewDidLoad];
    //管理者的代理
    self.locationManager.delegate = self;
    // 开始获取用户位置 注意:获取用户的方向信息是不需要用户授权的
    [self.locationManager startUpdatingHeading];
}

- (CLLocationManager *)locationManager
{
    if (!_locationManager) {
        _locationManager = [[CLLocationManager alloc] init];
    }
    return _locationManager;
}
当手机方向发生改变时,系统会调用下面方法
#pragma mark - CLLocationManagerDelegate
- (void)locationManager:(CLLocationManager *)manager didUpdateHeading:(CLHeading *)newHeading
{
    /*
     magneticHeading 设备与磁北的相对角度
     trueHeading 设置与真北的相对角度, 必须和定位一起使用, iOS需要设置的位置来计算真北
     真北始终指向地理北极点
     */
    // 1.将获取到的角度转为弧度 = (角度 * π) / 180;
    self.pinAngle = newHeading.magneticHeading * M_PI / 180.0;//指针方向
    self.degreeText.string = [NSString stringWithFormat:@"%.0f°",newHeading.magneticHeading];
    SCNMatrix4 transform = SCNMatrix4MakeTranslation(0.3, 0.3, 0.01);
    transform = SCNMatrix4Scale(transform, -0.03, -0.03, 0.03);
    self.degree.transform = transform;
}
ARFrame更新的代理方法
#pragma mark - ARSessionDelegate
- (void)session:(ARSession *)session didUpdateFrame:(ARFrame *)frame {
    SCNMatrix4 transform = SCNMatrix4MakeRotation(self.pinAngle+M_PI, 0,0,1);
    transform = SCNMatrix4Rotate(transform,M_PI_2, -1, 0, 0);
    transform = SCNMatrix4Rotate(transform, M_PI_4, 0, 1, 0);
    transform = SCNMatrix4Scale(transform, 0.5, 0.5, 0.5);
    transform = SCNMatrix4Rotate(transform, -frame.camera.eulerAngles[0], 1, 0, -1);
    transform = SCNMatrix4Translate(transform, 1.0, 0, 1.0);
    self.dashboardNode.transform = transform;//罗盘的位置
    
    SCNMatrix4 pinTransform = SCNMatrix4MakeRotation(M_PI, 0,0,1);
    pinTransform = SCNMatrix4Scale(pinTransform,0.1, 0.125, 0.1);
    pinTransform = SCNMatrix4Rotate(pinTransform,M_PI_2, -1, 0, 0);
    pinTransform = SCNMatrix4Rotate(pinTransform, M_PI_4, 0, 1, 0);
    pinTransform = SCNMatrix4Rotate(pinTransform, -frame.camera.eulerAngles[0], 1, 0, -1);
    pinTransform = SCNMatrix4Translate(pinTransform, 1.0, 0.01, 1.0);

    self.pinNode.transform = pinTransform;//指针的位置
}

demo地址

相关文章

  • AR之—悬空指南针

    新建CLLocationManager并设置代理 当手机方向发生改变时,系统会调用下面方法 ARFrame更新的代...

  • AR开发之AR视频

    本文我将带着大家去使用HiAR开发AR视频,那么什么是AR视频呢,看过我上篇文章的,应该了解AR是什么,上次我带大...

  • 悬空

    今天天气不错,万里无云,晴朗的天,心情也好。 烧了香,叫起孩。今天那个补课老师让去听课,让他喝个奶,走吧。没有吃早...

  • 悬空

    昨天出门办事。走了几十米才意识到,没带手机。估计不会有人急着找我,所以决定不回去拿了。 也就是说,在接下来的一个多...

  • 悬空

    前天中午走在路上眼里刮进了一个小片子,起初也没在意,眨巴眨巴绕到眼后,只是偶尔有点膈应。但到了下午,从自习室回家的...

  • 悬空

    我的心悬在空中,久久地不能落下,以至于我现实的身躯也觉得是悬在空中了。 不踏实。 然而我又确乎是希望踏实并且渴望踏...

  • 悬空

    1. 天上的月亮坠落了,落在光滑如镜的湖面,荡起一阵阵涟漪。于是就有了无数个月亮在湖面荡漾。 叶心盯着湖面的倒影发...

  • 指南针指南指北不指东西——易力生对句之九十五

    指南针指南指北不指东西——易力生对句之九十五 对联两副 言粗女言粗言硬非言细软(易力生原创对句) 指南针指南指北不...

  • 指南针小组1月活动汇总贴

    1.组内讨论 1.1指南针小组启动会 小生:2016揩油-指南针-启动会 1.2指南针小组第二次讨论 指南针小组 ...

  • 2022探亲之悟

    20220725——20220801之反思 大家庭,失了指南针、折了擎天柱,后继者,均不能胜任主位主导之责,又定位...

网友评论

      本文标题:AR之—悬空指南针

      本文链接:https://www.haomeiwen.com/subject/ehgbpftx.html