2017-07-03 3 views
0

J'utilise le SDK "vuforia" pour la reconnaissance d'objet dans iOS. J'utilise un exemple de code donné par vuforia et capable de reconnaître un objet en utilisant la partie "ObjectReco".Reconnaissance d'objet 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];} 

Je suis en mesure d'obtenir objet à "NSLog (@" @> @ ObjectTarget trouvé! ");" maintenant je veux remplacer cet objet (image) avec un autre objet (image) comment je peux le faire?

Répondre

0

veuillez aller sur le site officiel de Vuforia. Ils ont une série d'instructions sur la façon de changer l'image cible prédéfinie pour les vôtres. Je pense que vous devez télécharger votre propre image cible sur Vurforia en premier lieu, puis ils vous montreront les instructions pour passer à l'étape suivante. espérons que cela aide