Posts match “ AR ” tag:

Qualcomm Vuforia in Xcode 6

Qualcomm Vuforia 真不是普通的難上手,文件寫的跟天書一樣,
照官方文件裝完,應該有很大的機會跑不起來,先確認一下
Build Settings -> Architectures: armv7 armv7s
目前 4.0.5 Beta 還沒支援 arm64,但官方有說之後會補上。

先設定 license key

SampleApplicationSession.mm
QCAR::setInitParameters(mQCARInitFlags,"add your license key");

接著把要辨識的圖形丟上 Target Manager 並下載回來,會有兩個檔 *.dat
*.xml 內容如下,稍微看一下 ImageTarget name 之後會用到。

<ImageTarget name="ARCODE1" size="500.000000 500.000000" />

設定辨識檔

ImageTargetsViewController.m
dataSetStonesAndChips = [self loadObjectTrackerDataSet:@"your xml file"];

官方所提供的範例做法是 viewController -> EAGLView,EAGLView 包含
OpenGL ES Context 可以放 3D 物件,另外也可以再加上自己的 subview 與一般
ios 做法沒什麼差別,要特別提到是 QCAR 會呼叫 renderFrameQCAR
進行辨識,由於 randerFrameQCAR 是在 background thread 執行,
所以當你要更新 UI 時,要用 performSelectorOnMainThread 去處理。
簡單範例如下

- (void)renderFrameQCAR
{
  [self setFramebuffer];
  // Clear colour and depth buffers
  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  
  // Render video background and retrieve tracking state
  QCAR::State state = QCAR::Renderer::getInstance().begin();
  QCAR::Renderer::getInstance().drawVideoBackground();

  // ...  
  for (int i = 0; i < state.getNumTrackableResults(); ++i) {
    // Get the trackable
    const QCAR::TrackableResult* result = state.getTrackableResult(i);
    const QCAR::Trackable& trackable = result->getTrackable();
    
    // Choose the index based on the ImageTarget name
    int targetIndex = 0; // "stones"
    if (!strcmp(trackable.getName(), "chips"))
      targetIndex = 1;
    else if (!strcmp(trackable.getName(), "tarmac"))
      targetIndex = 2;
    else if (!strcmp(trackable.getName(), "ARCODE1"))
      targetIndex = 3;
    
    if (targetIndex==3) {
      [self performSelectorOnMainThread:@selector(showMyView) withObject:nil waitUntilDone:NO];
    }
    SampleApplicationUtils::checkGlError("EAGLView renderFrameQCAR");
  }
  
  // ...
  [self presentFramebuffer];
}