AR-приложение на основе маркеров с использованием Qualcomm SDK - PullRequest
1 голос
/ 25 августа 2011

Я занимаюсь разработкой приложения для Android, в котором воспроизводится конкретное видео, когда постер определенного фильма показывается перед камерой в Android. Ранее я использовал проект AndAr для этого материала и внес некоторые изменения в функцию draw () в customObject и заставил его работать. Но теперь мой клиент хочет, чтобы я использовал Qualcomm SDK. Я играл с приложением целевых изображений, но не смог найти ничего, что могло бы попасть в мою голову.

1 Ответ

2 голосов
/ 26 августа 2011

Хорошо, у меня все получилось.Ниже приведено решение, которое я получил по этой ссылке

https://ar.qualcomm.at/arforums/showthread.php?t=32

У imagetargets.cpp, который у меня уже был, есть метод renderFrame, поэтому мне пришлось немного его изменить

  JNIEXPORT void JNICALL
  Java_com_qualcomm_QCARSamples_ImageTargets_ImageTargetsRenderer_renderFrame(JNIEnv*       
  env, jobject obj)

{
//LOG("Java_com_qualcomm_QCARSamples_ImageTargets_GLRenderer_renderFrame");

// Clear color and depth buffer 
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

// Render video background:
QCAR::State state = QCAR::Renderer::getInstance().begin();

 #ifdef USE_OPENGL_ES_1_1
// Set GL11 flags:
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_NORMAL_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);

glEnable(GL_TEXTURE_2D);
glDisable(GL_LIGHTING);

 #endif

glEnable(GL_DEPTH_TEST);
glEnable(GL_CULL_FACE);

// Did we find any trackables this frame?
for(int tIdx = 0; tIdx < state.getNumActiveTrackables(); tIdx++)
{
    // Get the trackable:
    const QCAR::Trackable* trackable = state.getActiveTrackable(tIdx);
    QCAR::Matrix44F modelViewMatrix =
        QCAR::Tool::convertPose2GLMatrix(trackable->getPose());        

    // Choose the texture based on the target name:
    int textureIndex = (!strcmp(trackable->getName(), "stones")) ? 0 : 1;
    const Texture* const thisTexture = textures[textureIndex];

    jstring js = env->NewStringUTF(trackable->getName());
               jclass javaClass = env->GetObjectClass(obj);
               jmethodID method = env->GetMethodID(javaClass, "displayMessage", "(Ljava/lang/String;)V");
               env->CallObjectMethod(obj, method, js);

  }

glDisable(GL_DEPTH_TEST);

 #ifdef USE_OPENGL_ES_1_1        
glDisable(GL_TEXTURE_2D);
glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_NORMAL_ARRAY);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
 #else
glDisableVertexAttribArray(vertexHandle);
glDisableVertexAttribArray(normalHandle);
glDisableVertexAttribArray(textureCoordHandle);
 #endif

QCAR::Renderer::getInstance().end();
}

и после внесения изменений в класс imageRenderer я добавил следующий код в резюме: -

   ImageTargetsRenderer.mainActivityHandler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            Intent intent = new Intent(Intent.ACTION_VIEW);
            intent.setData(Uri.parse("http://www.youtube.com/watch?v=DyDA2Abnssg"));
            startActivity(intent);
            ImageTargets.this.finish();
        }
    };
...