1

嗨,我正在用 QCAR 和 JPCT-AE 制作一些应用程序。有人可以看到我的源代码并给我建议吗?如果可以的话,我会把我的源代码发给你。我的电子邮件地址是 lyhdra99@gmail.com。

请帮帮我^^


第一的

  1. 我将 modelViewMatrix(QCAR::Matrix44F) 从 JNI 发送到 JAVA ex) JNIEXPORT jfloatArray JNICALL Java_jp_may_com_VirtualButtonsRenderer_getNowMatrix(JNIEnv* env, jobject obj)
  2. 像下面这样使用这个modelViewMatrix

public class VirtualButtonsRenderer implements GLSurfaceView.Renderer {


    public VirtualButtonsRenderer(Activity act) {
        Config.maxAnimationSubSequences = 999;
        // TODO Auto-generated constructor stub
        this.act = act;
        _Object3D = Loader.loadMD2(act.getResources().openRawResource(R.raw.tris), 1.0f);
        _Object3D.setName("MyTarget");
    }

    public native float[] getNowMatrix();

    public void onSurfaceCreated(GL10 gl, EGLConfig config) {

        initRendering();
        QCAR.onSurfaceCreated();
        world = new World();
        world.setAmbientLight(20, 20, 20);
        TextureManager tm = TextureManager.getInstance();
        com.threed.jpct.Texture Cover = new com.threed.jpct.Texture(BitmapFactory.decodeStream(act.getResources().openRawResource(R.raw.skin)));
        tm.addTexture("Cover", Cover);          
        _Object3D.setTexture("Cover");
        world.addObject(_Object3D);
        world.buildAllObjects();
        sun = new Light(world);
        sun.setIntensity(250, 250, 250);        
        Camera cam = world.getCamera();
        cam.moveCamera(Camera.CAMERA_MOVEOUT, 100);
        cam.lookAt(_Object3D.getTransformedCenter());           
        SimpleVector sv = new SimpleVector();
        sv.set(_Object3D.getTransformedCenter());
        sv.x -= 300;
        sv.z -= 0;
        sun.setPosition(sv);
        MemoryHelper.compact(); 

    }

    public void onDrawFrame(GL10 gl) {
        if (!mIsActive)
            return;
        if (renderFrame()) {
            Matrix NowMatrix = new Matrix();
            NowMatrix.fillDump(getNowMatrix());
            world.getCamera().setBack(NowMatrix);
            world.renderScene(fb);          
            world.draw(fb);     
            fb.display();
            return;
        } else {
            mIsTouch = false;
        }
    }

}

在这里,我有问题。我认为 Object3D 可以像茶壶(QCAR 示例对象)一样在带有 modelViewMatrix 的 Marker 上移动。但它不能。

这是我的问题^^;;

4

1 回答 1

0

我想为您的应用程序提供帮助,请将您的本机 imagetarget.cpp 代码发送给我,

在此之前,我想你已经看过这个页面,请参考一次

http://www.jpct.net/wiki/index.php/Integrating_JPCT-AE_with_Vuforia

其项目源代码 https://github.com/sidneibjunior/vuforia-jpct

从 renderframe 获取你的 modelViewMatrix 并将其发送到 java ,就像这样

常量 QCAR::TrackableResult* 结果 = state.getTrackableResult(tIdx);

QCAR::Matrix44F modelViewMatrix = QCAR::Tool::convertPose2GLMatrix(result->getPose());

SampleUtils::rotatePoseMatrix(90.0f, 1.0f, 0, 0, &modelViewMatrix.data[0]);

//反转矩阵 QCAR::Matrix44F inverseMV = SampleMath::Matrix44FInverse(modelViewMatrix);

//转置倒置矩阵 QCAR::Matrix44F invTranspMV = SampleMath::Matrix44FTranspose(inverseMV);

将逆转置矩阵发送到 java 代码。它会正常工作......我希望:)

于 2014-09-06T10:24:45.593 回答