2016-09-09 3 views
-4

拡張現実感とGPSを搭載したAndroidとiOSアプリをいくつか作成したいと考えています。このアプリは、大きなオブジェクトをカメラ(車、建物など)で認識し、このオブジェクトにいくつかの文章を作成する必要があります。私たちは、GPS座標とこの場所の写真を認識できるオブジェクトからすべて消してしまいました。 アプリは - http://med44.com/v2/freshkills.phpのように動作します。IOSとAndroidで拡張現実+ GPSをプログラミングするライブラリを探したい

Idは、いくつかのlibrarysが見つかりました:

artoolkitを - 無料ですべての楽器を持って、私はそれがプログラムに難しいだろうと思うし、私はそれ

vuforiaを学習することで、多くの時間を過ごすことになります - で私のこのアプリをプログラムするには最良の方法だと思うが、GPSの位置を知ることはできない。それは他よりも簡単です

ジンバル= vuforia + GPS、ロシア連邦ではうまくいきません。

layar - 私はどのようなARタスクを解決できるのか分かりませんでしたが、あなたのアプリに追加できるSassプラットフォームのように見えます。素晴らしいですが、私は知らない:それは私のプログラミングタスクを解決することはできますか?

arlab - その情報はありません。それはlybraryは私の仕事のすべてを解決することができますか?

UPD:私は新しいlybrary-wikitubeを見つけましたが、それで私のアプリをプログラムする良い方法があるのですか?

今、私はIOSとAndroidでリアルタイムに認識と表示にどのようなライブラリを使用できますか?

+0

Wikitudeは、このsdkでgpsと位置認識の機能を簡単に使用できる拡張現実感アプリです –

答えて

0

wikitude SDKを使用してください。私は最近、自分のアプリケーションの1つに実装しました。これは、クラウドとローカルでの認識にも優れています。添付されているコードでWikitudeを使用する方法の例ですが、あなたは下のコードを使用する前にsdkをインポートする必要があります!

#define kWTLicenseKey @"put key here" 

#import "WTSimpleClientTrackerViewController.h" 

#import <WikitudeNativeSDK/WikitudeNativeSDK.h> 

#import "StrokedRectangle.h" 
#import "ExternalRenderer.h" 
#import "ScanEvent.h" 
#import "CokeStudioAPI.h" 

@interface WTSimpleClientTrackerViewController() <WTWikitudeNativeSDKDelegate, WTClientTrackerDelegate> 

@property (nonatomic, strong) WTWikitudeNativeSDK       *wikitudeSDK; 
@property (nonatomic, strong) WTClientTracker        *clientTracker; 

@property (nonatomic, strong) EAGLContext         *sharedWikitudeEAGLCameraContext; 

@property (nonatomic, copy) WTWikitudeUpdateHandler       wikitudeUpdateHandler; 
@property (nonatomic, copy) WTWikitudeDrawHandler       wikitudeDrawHandler; 

@property (nonatomic, assign) BOOL           isTracking; 
@property (nonatomic, assign) BOOL           targetFound; 
@property (nonatomic, strong) ExternalRenderer        *renderer; 
@property (nonatomic, strong) StrokedRectangle        *renderableRectangle; 

@end 


@implementation WTSimpleClientTrackerViewController 

#pragma mark UIViewController 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    self.renderer = [[ExternalRenderer alloc] init]; 
    self.renderableRectangle = [[StrokedRectangle alloc] init]; 
    self.renderableRectangle.scale = 320.0f; 

    self.wikitudeSDK = [[WTWikitudeNativeSDK alloc] initWithRenderingMode:WTRenderingMode_External delegate:self]; 
    [self.wikitudeSDK setLicenseKey:kWTLicenseKey]; 

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didReceiveApplicationWillResignActiveNotification:) name:UIApplicationWillResignActiveNotification object:nil]; 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didReceiveApplicationDidBecomeActiveNotification:) name:UIApplicationDidBecomeActiveNotification object:nil]; 
    self.navigationController.navigationBar.hidden = true; 

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didReceiveApplicationDidBecomeActiveNotification:) name:kApplicationDidBecomeInActive object:nil]; 


} 

-(void)viewWillAppear:(BOOL)animated{ 
    [super viewWillAppear: animated]; 
    [[CokeStudioAPI sharedInstance] trackScreen:@"VR Camera"]; 
} 

- (void)viewDidAppear:(BOOL)animated 
{ 
    [super viewDidAppear:animated]; 

    [self.renderer setupRenderingWithLayer:[self.eaglView eaglLayer]]; 
    [self.renderer startRenderLoopWithRenderBlock:[self renderBlock]]; 

    [self.wikitudeSDK start:nil completion:^(BOOL isRunning, NSError * __nonnull error) { 
     if (!isRunning) { 
      NSLog(@"Wikitude SDK is not running. Reason: %@", [error localizedDescription]); 
     } 
     else 
     { 
      NSArray *paths = [[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask]; 
      NSURL *trackerURL = [[paths lastObject] URLByAppendingPathComponent:@"tracker.wtc"]; 

      NSURL *clientTrackerURL = trackerURL; 
      self.clientTracker = [self.wikitudeSDK.trackerManager create2DClientTrackerFromURL:clientTrackerURL extendedTargets:nil andDelegate:self]; 
     } 
    }]; 
} 

- (void)viewDidDisappear:(BOOL)animated 
{ 
    [super viewDidDisappear:animated]; 

    [self.wikitudeSDK stop]; 

    [self.renderer stopRenderLoop]; 
    [self.renderer teardownRendering]; 

    [[NSNotificationCenter defaultCenter] removeObserver:self]; 
} 

- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator 
{ 
    [super viewWillTransitionToSize:size withTransitionCoordinator:coordinator]; 

    [self.wikitudeSDK shouldTransitionToSize:size withTransitionCoordinator:coordinator]; 
} 

- (void)didReceiveMemoryWarning { 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 


#pragma mark - ExternalRenderer render loop 
- (ExternalRenderBlock)renderBlock 
{ 
    return^(CADisplayLink *displayLink) { 
     if (self.wikitudeUpdateHandler 
      && 
      self.wikitudeDrawHandler) 
     { 
      self.wikitudeUpdateHandler(); 
      self.wikitudeDrawHandler(); 
     } 

     [self.renderer bindBuffer]; 

     if (_isTracking) 
     { 
      [self.renderableRectangle drawInContext:[self.renderer internalContext]]; 
     } 
    }; 
} 

#pragma mark - Notifications 
- (void)didReceiveApplicationWillResignActiveNotification:(NSNotification *)notification 
{ 
    [self.wikitudeSDK stop]; 
    [self dismissViewControllerAnimated:true completion:nil]; 
} 

- (void)didReceiveApplicationDidBecomeActiveNotification:(NSNotification *)notification 
{ 
    [self.wikitudeSDK start:nil completion:^(BOOL isRunning, NSError * __nonnull error) { 
     if (!isRunning) { 
      NSLog(@"Wikitude SDK is not running. Reason: %@", [error localizedDescription]); 
     } 
    }]; 
} 

#pragma mark - Delegation 
#pragma mark WTWikitudeNativeSDKDelegte 
- (void)wikitudeNativeSDK:(WTWikitudeNativeSDK * __nonnull)wikitudeNativeSDK didCreatedExternalUpdateHandler:(WTWikitudeUpdateHandler __nonnull)updateHandler 
{ 
    self.wikitudeUpdateHandler = updateHandler; 
} 

- (void)wikitudeNativeSDK:(WTWikitudeNativeSDK * __nonnull)wikitudeNativeSDK didCreatedExternalDrawHandler:(WTWikitudeDrawHandler __nonnull)drawHandler 
{ 
    self.wikitudeDrawHandler = drawHandler; 
} 

- (EAGLContext *)eaglContextForVideoCameraInWikitudeNativeSDK:(WTWikitudeNativeSDK * __nonnull)wikitudeNativeSDK 
{ 
    if (!_sharedWikitudeEAGLCameraContext) 
    { 
     EAGLContext *rendererContext = [self.renderer internalContext]; 
     self.sharedWikitudeEAGLCameraContext = [[EAGLContext alloc] initWithAPI:[rendererContext API] sharegroup:[rendererContext sharegroup]]; 
    } 
    return self.sharedWikitudeEAGLCameraContext; 
} 

- (CGRect)eaglViewSizeForExternalRenderingInWikitudeNativeSDK:(WTWikitudeNativeSDK * __nonnull)wikitudeNativeSDK 
{ 
    return self.eaglView.bounds; 
} 

- (void)wikitudeNativeSDK:(WTWikitudeNativeSDK * __nonnull)wikitudeNativeSDK didEncounterInternalError:(NSError * __nonnull)error 
{ 
} 

#pragma mark WTClientTrackerDelegate 

- (void)baseTracker:(nonnull WTBaseTracker *)baseTracker didRecognizedTarget:(nonnull WTImageTarget *)recognizedTarget 
{ 

    _isTracking = YES; 
    [self dismissViewControllerAnimated:true completion:nil]; 

    NSDictionary* userInfo = @{@"artistName": [NSString stringWithFormat:@"%@",[recognizedTarget name]]}; 
    [[NSNotificationCenter defaultCenter] postNotificationName:@"targetFound" object:self userInfo:userInfo]; 

} 

- (void)baseTracker:(nonnull WTBaseTracker *)baseTracker didTrackTarget:(nonnull WTImageTarget *)trackedTarget 
{ 
    [self.renderableRectangle setProjectionMatrix:trackedTarget.projection]; 
    [self.renderableRectangle setModelViewMatrix:trackedTarget.modelView]; 
} 

- (void)baseTracker:(nonnull WTBaseTracker *)baseTracker didLostTarget:(nonnull WTImageTarget *)lostTarget 
{ 
    _isTracking = NO; 
} 

- (IBAction)doneBtnTapped:(id)sender { 
    [self dismissViewControllerAnimated:true completion:nil]; 
} 

- (void)clientTracker:(nonnull WTClientTracker *)clientTracker didFinishedLoadingTargetCollectionFromURL:(nonnull NSURL *)URL 
{ 
} 

- (void)clientTracker:(nonnull WTClientTracker *)clientTracker didFailToLoadTargetCollectionFromURL:(nonnull NSURL *)URL withError:(nonnull NSError *)error 
{ 
} 
関連する問題