2017-07-03 129 views
0

我在iOS中使用「vuforia」SDK進行物體識別。我使用vuforia給出的示例代碼並能夠使用「ObjectReco」部分識別物體。物體識別vuforia

- (void)renderFrameWithState:(const Vuforia::State &)state projectMatrix:(Vuforia::Matrix44F &)projectionMatrix{ 
[self setFramebuffer]; 
// Clear colour and depth buffers 
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 

// Render video background 
[sampleAppRenderer renderVideoBackground]; 

glEnable(GL_DEPTH_TEST); 
glEnable(GL_CULL_FACE); 

glEnable(GL_BLEND); 
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 

for (int i = 0; i < state.getNumTrackableResults(); ++i) { 
    // Get the trackable 
    const Vuforia::TrackableResult* result = state.getTrackableResult(i); 
    const Vuforia::Trackable& trackable = result->getTrackable(); 

    if (! result->isOfType(Vuforia::ObjectTargetResult::getClassType())) { 
     continue; 
    } 

    NSLog(@"@>@ ObjectTarget found!"); 

    const Vuforia::ObjectTarget& objectTarget = (const Vuforia::ObjectTarget&) trackable; 

    Vuforia::Vec3F objectSize = objectTarget.getSize(); 

    //const Vuforia::Trackable& trackable = result->getTrackable(); 
    Vuforia::Matrix44F modelViewMatrix = Vuforia::Tool::convertPose2GLMatrix(result->getPose()); 

    // OpenGL 2 
    Vuforia::Matrix44F modelViewProjection; 

    SampleApplicationUtils::translatePoseMatrix(objectSize.data[0]/2, 
               objectSize.data[1]/2, 
               objectSize.data[2]/2, 
               &modelViewMatrix.data[0]); 
    SampleApplicationUtils::scalePoseMatrix(objectSize.data[0]/2, 
              objectSize.data[1]/2, 
              objectSize.data[2]/2, 
              &modelViewMatrix.data[0]); 

    SampleApplicationUtils::multiplyMatrix(&projectionMatrix.data[0], &modelViewMatrix.data[0], &modelViewProjection.data[0]); 

    glUseProgram(shaderProgramID); 

    glVertexAttribPointer(vertexHandle, 3, GL_FLOAT, GL_FALSE, 0, (const GLvoid*)cubeVertices); 
    glVertexAttribPointer(normalHandle, 3, GL_FLOAT, GL_FALSE, 0, (const GLvoid*)cubeNormals); 
    glVertexAttribPointer(textureCoordHandle, 2, GL_FLOAT, GL_FALSE, 0, (const GLvoid*)cubeTexCoords); 

    glEnableVertexAttribArray(vertexHandle); 
    glEnableVertexAttribArray(normalHandle); 
    glEnableVertexAttribArray(textureCoordHandle); 

    glActiveTexture(GL_TEXTURE0); 
    glBindTexture(GL_TEXTURE_2D, augmentationTexture[0].textureID); 
    glUniformMatrix4fv(mvpMatrixHandle, 1, GL_FALSE, (const GLfloat*)&modelViewProjection.data[0]); 
    glUniform1i(texSampler2DHandle, 0 /*GL_TEXTURE0*/); 

    glDrawElements(GL_TRIANGLES, NUM_CUBE_INDEX, GL_UNSIGNED_SHORT, (const GLvoid*)cubeIndices); 

    glDisableVertexAttribArray(vertexHandle); 
    glDisableVertexAttribArray(normalHandle); 
    glDisableVertexAttribArray(textureCoordHandle); 

    SampleApplicationUtils::checkGlError("EAGLView renderFrameVuforia"); 

} 

glDisable(GL_DEPTH_TEST); 
glDisable(GL_BLEND); 
glDisable(GL_CULL_FACE); 
[self presentFramebuffer];} 

我能夠在「NSLog(@」@> @ ObjectTarget found!「);」現在我想用另一個對象(圖像)替換這個對象(圖像)我怎麼能做到這一點?

回答

0

請前往Vuforia官方網站。他們有一系列關於如何將預設目標圖像更改爲您自己的圖像的說明。我認爲你需要首先將你自己的目標圖片上傳到Vurforia,然後他們會向你展示如何進入下一步。 希望它有幫助