2017-07-03 128 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,然后他们会向你展示如何进入下一步。 希望它有帮助