Image Tracker

평면 이미지를 인식 / 추적하여 3D 콘텐츠와 비디오 영상, 크로마키 영상까지 증강시킬 수 있습니다.

Tracker 시작 / 종료
Tracking 정보 이용
맵 설정
맵 추가 / 교체
Tracking 모드 변경

Tracker 시작 / 종료

맵을 로딩한 후 Tracker를 시작 / 종료하려면 다음 코드를 참고하세요.

ImageTrackerViewController.mm

- (void)resumeAR
{
    ...
    TrackerManager::getInstance()->startTracker(IMAGE_TRACKER);
}

- (void)pauseAR
{
    TrackerManager::getInstance()->stopTracker();
    ...
}

Tracking 정보 이용

SDK가 설치된 폴더에서 datas > ImageTarget 폴더로 이동하면 샘플 타겟 이미지가 있습니다. 원하는 이미지를 인쇄하거나 화면에 출력합니다.

샘플 코드를 이용할 경우 이미지별 증강되는 콘텐츠는 다음과 같습니다.

  • Blocks.jpg: 알파 동영상이 증강됩니다.
  • Lego.jpg: 일반 동영상이 증강됩니다.
  • Glacier.jpg: 텍스쳐가 입혀진 큐브가 증강됩니다.

Tracking 결과를 증강 물체에 적용하려면 다음 코드를 참고하세요.

ImageTrackerViewController.mm

- (void)glkView:(GLKView *)view drawInRect:(CGRect)rect
{
    ...
    ITrackingResult *result = &TrackerManager::getInstance()->getTrackingResult();
    
    int trackingCount = (int)result->getCount();
    
    if(trackingCount > 0)
    {
        for (int i = 0; i < (int)result->getCount(); i++)
        {
            ITrackable *trackable = result->getTrackable(i);
            
            if(trackable->getName() == "Lego")
            {
                ...
            }
            else if(trackable->getName() == "Blocks")
            {
                ...
            }
            else if(trackable->getName() == "Glacier")
            {
                ...
            }
            else
            {
                gl_helper::Mat4 pose = trackable->getPose();
                pose = projectionMatrix * pose;
                coloredCube->setTransform(pose);
                coloredCube->setPosition(0.0f, 0.0f, -0.15f);
                coloredCube->setScale(0.3f, 0.3f, 0.3f);
                coloredCube->draw();
            }
            ...
        }
    }
    ...
}

맵 설정

addTrackerData ()를 호출해서 맵 파일을 등록하고 loadTrackerData ()를 호출하면 타겟 이미지를 Tracking 할 수 있는 상태가 됩니다. 맵 파일을 설정하는 방법은 다음 코드를 참고하세요.

ImageTrackerViewController.mm

- (void)startEngine
{
    ...
    NSString *blocksTrackerMapPath = [[NSBundle mainBundle] pathForResource:@"Blocks" ofType:@"2dmap" inDirectory:@"datas/ImageTarget"];
    NSString *glacierTrackerMapPath = [[NSBundle mainBundle] pathForResource:@"Glacier" ofType:@"2dmap" inDirectory:@"datas/ImageTarget"];
    NSString *legoTrackerMapPath = [[NSBundle mainBundle] pathForResource:@"Lego" ofType:@"2dmap" inDirectory:@"datas/ImageTarget"];
    
    TrackerManager::getInstance()->startTracker(IMAGE_TRACKER);
    ...
    TrackerManager::getInstance()->addTrackerData(std::string([blocksTrackerMapPath UTF8String]));
    TrackerManager::getInstance()->addTrackerData(std::string([glacierTrackerMapPath UTF8String]));
    TrackerManager::getInstance()->addTrackerData(std::string([legoTrackerMapPath UTF8String]));
    
    TrackerManager::getInstance()->loadTrackerData();
}

맵 추가 / 교체

  1. Documentation > Target Manager를 참고하여 맵 파일을 생성합니다.

  2. 생성한 파일을 다운로드합니다.

  3. 다운로드 받은 파일의 압축을 풀어서 원하는 경로에 복사합니다.

  4. 맵을 설정합니다.

Tracking 모드 변경

Image Tracker는 normal, extended, multi 세가지 Tracking 모드가 있습니다.

기본 설정은 normal 모드 입니다.

  • normal 모드: 기존 image tracker와 같은 기능입니다.
TrackerManager::getInstance()->setTrackingOption(NORMAL_TRACKING);
  • extended 모드: 타깃 이미지로부터 거리가 많이 멀어져도 추적 가능한 기능입니다.
TrackerManager::getInstance()->setTrackingOption(EXTENDED_TRACKING);
  • multi 모드: 동시에 세개까지의 타깃 이미지를 인식 및 추적할 수 있는 기능입니다.
TrackerManager::getInstance()->setTrackingOption(MULTI_TRACKING);