Как правильно использовать собственный 3D-объект в Vuforia без Unity?

Я использую Vuforia и jPCT(для рендеринга 3D OBJ) в своем приложении AR. Образец Vuforia прекрасно работает с Teapot и Cube. Но когда я пытаюсь заменить примитивные объекты своим собственным 3D-объектом, объект не отображается. библиотека движков лучше всего подходит для Vuforia?

public UserDefinedTargetRenderer2(UserDefinedTargets activity,
                                  SampleApplicationSession session, AssetManager assets)
{
    mActivity = activity;

    vuforiaAppSession = session;

    // SampleAppRenderer used to encapsulate the use of RenderingPrimitives setting
    // the device mode AR/VR and stereo mode
    mSampleAppRenderer = new SampleAppRenderer(this, mActivity, Device.MODE.MODE_AR, false, 10f, 5000f);
    mAssets = assets;


    InputStream objStream = null;
    InputStream objMtlStream = null;

    try {

        objStream = mAssets.open("model.obj");
        objMtlStream = mAssets.open("materials.mtl");
    } catch (IOException e) {
        e.printStackTrace();
    }

    Object3D[] object3DS = Loader.loadOBJ(objStream, objMtlStream, 100f);

    obj = Object3D.mergeAll(object3DS);

    world = new World();
    world.setAmbientLight(20, 20, 20);

    sun = new Light(world);
    sun.setIntensity(250, 250, 250);

    obj.strip();
    obj.build();
    cam = world.getCamera();
    cam.moveCamera(Camera.CAMERA_MOVEOUT, 50);
    cam.lookAt(obj.getTransformedCenter());

    SimpleVector sv = new SimpleVector();
    sv.set(obj.getTransformedCenter());
    sv.y -= 100;
    sv.z -= 100;
    sun.setPosition(sv);
    MemoryHelper.compact();
}

Как правильно использовать собственный 3D-объект в Vuforia?

public void renderFrame(State state, float[] projectionMatrix)
{
    // Renders video background replacing Renderer.DrawVideoBackground()
    mSampleAppRenderer.renderVideoBackground();

    GLES20.glEnable(GLES20.GL_DEPTH_TEST);
    GLES20.glEnable(GLES20.GL_CULL_FACE);

    // Render the RefFree UI elements depending on the current state
    mActivity.refFreeFrame.render();

    // Did we find any trackables this frame?
    for (int tIdx = 0; tIdx < state.getNumTrackableResults(); tIdx++)
    {
        // Get the trackable:
        TrackableResult trackableResult = state.getTrackableResult(tIdx);
        Matrix44F modelViewMatrix_Vuforia = Tool
                .convertPose2GLMatrix(trackableResult.getPose());
        float[] modelViewMatrix = modelViewMatrix_Vuforia.getData();

        float[] modelViewProjection = new float[16];
        android.opengl.Matrix.translateM(modelViewMatrix, 0, 0.0f, 0.0f, kObjectScale);
        android.opengl.Matrix.scaleM(modelViewMatrix, 0, kObjectScale, kObjectScale,
                kObjectScale);
        android.opengl.Matrix.multiplyMM(modelViewProjection, 0, projectionMatrix, 0, modelViewMatrix, 0);

        GLES20.glUseProgram(shaderProgramID);


        Matrix m = new Matrix();
        m.setDump(modelViewMatrix);
        cam.setBack(m);

        /*GLES20.glVertexAttribPointer(vertexHandle, 3, GLES20.GL_FLOAT,
                false, 0, mTeapot.getVertices());
        GLES20.glVertexAttribPointer(textureCoordHandle, 2,
                GLES20.GL_FLOAT, false, 0, mTeapot.getTexCoords());
        GLES20.glEnableVertexAttribArray(vertexHandle);
        GLES20.glEnableVertexAttribArray(textureCoordHandle);
        GLES20.glActiveTexture(GLES20.GL_TEXTURE0);
        GLES20.glBindTexture(GLES20.GL_TEXTURE_2D,
                mTextures.get(0).mTextureID[0]);
        GLES20.glUniformMatrix4fv(mvpMatrixHandle, 1, false,
                modelViewProjection, 0);
        GLES20.glUniform1i(texSampler2DHandle, 0);
        GLES20.glDrawElements(GLES20.GL_TRIANGLES,
                mTeapot.getNumObjectIndex(), GLES20.GL_UNSIGNED_SHORT,
                mTeapot.getIndices());
        GLES20.glDisableVertexAttribArray(vertexHandle);
        GLES20.glDisableVertexAttribArray(textureCoordHandle);
        SampleUtils.checkGLError("UserDefinedTargets renderFrame");*/
    }

    GLES20.glDisable(GLES20.GL_DEPTH_TEST);

    Renderer.getInstance().end();
}

Мой полный код: https://gist.github.com/rramprasad/4d5f2183703301e68dcd69a2fc75657a

0 ответов

Другие вопросы по тегам