Интеграция JPCT-ae с QCAR(vuforia)

Я знаю, что я собираюсь спросить, иногда уже обсуждали, но, пройдя через все из них, я не могу найти свой полный ответ, поэтому я задаю новый вопрос

Когда я попытался интегрировать JPCT-ae с QCAR, все прошло хорошо, как и ожидалось, я получил свою матрицу просмотра модели из renderframe из jni и успешно перенес ее в java в jpct, модель показала себя как положено. но когда я попытался передать эту матрицу на камеру мира JPCT, моя модель исчезла.

мой код: в onsurfaceaged:

world = new World();
            world.setAmbientLight(20, 20, 20);
            sun = new Light(world);
            sun.setIntensity(250, 250, 250);
            cube = Primitives.getCube(1);
            cube.calcTextureWrapSpherical();
            cube.strip();
            cube.build();
            world.addObject(cube);
            cam = world.getCamera();
            cam.moveCamera(Camera.CAMERA_MOVEOUT, 10);
            cam.lookAt(cube.getTransformedCenter());
            SimpleVector sv = new SimpleVector();
            sv.set(cube.getTransformedCenter());
            sv.y -= 100;
            sv.z -= 100;
            sun.setPosition(sv);
            MemoryHelper.compact();

и в ondraw:

com.threed.jpct.Matrix mResult = new com.threed.jpct.Matrix();
            mResult.setDump(modelviewMatrix );  //modelviewMatrix i get from Qcar
            cube.setRotationMatrix(mResult);
            cam.setBack(mResult);
                     fb.clear(back);
        world.renderScene(fb);
        world.draw(fb);
        fb.display();

после некоторого исследования я обнаружил, что QCAR использует правую систему координат, что означает, что положительный X направлен правильно, положительный Y повышается, а положительный Z выходит из экрана, но в системе координат JPCT положительный X идет правильно, положительный Y идет вниз и Z-позитив идет в экран.

Система координат Qcar:

Система координат QCAR

я знаю, что матрица, которую дает QCar - это матрица 4*4, имеющая 3*3 значения вращения и вектор перевода.

я размещаю матрицы, чтобы быть более понятным:

modelviewmatrix:

1.512537      -159.66255   -10.275316   0.0
-89.86529      -1.1592013   4.7839375            0.0
-8.619186     10.179538     -159.44305   0.0
59.182976        93.205956     437.2832            1.0

modelviewmatrix после реверса с использованием cam.setBack(modelviewmatrix.invert(modelviewmatrix)):

5.9083453E-5   -0.01109448   -3.3668696E-4   0.0
0.0040540528   -3.8752193E-4   0.0047518034   0.0
-0.004756433   -4.6811014E-4   0.0040459237   0.0
0.7533285     0.4116795            2.7063704   0.9999999

если я удаляю 13,14 и 15 матричный элемент, предполагая, что матрица вращения 3*3... модель вращается правильно, но перемещения (перемещения изображения) не существует, в конце концов, я не знаю, какие изменения необходим вектор перевода. поэтому, пожалуйста, предложите мне, что мне здесь не хватает?

1 ответ

QCAR::Matrix44F inverseMatrix = SampleMath::Matrix44FInverse(modelViewMatrix); QCAR::Matrix44F invTransposeMatrix = SampleMath::Matrix44FTranspose(inverseMatrix);

затем передать invTransposeMatrix значение для Java

env->SetFloatArrayRegion(modelviewArray, 0, 16, invTransposeMatrix.data); env->CallVoidMethod(obj, method, modelviewArray);

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