Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Android中集成jPCT AE和ARToolKit_Android_Opengl Es_Artoolkit_Jpct - Fatal编程技术网

在Android中集成jPCT AE和ARToolKit

在Android中集成jPCT AE和ARToolKit,android,opengl-es,artoolkit,jpct,Android,Opengl Es,Artoolkit,Jpct,我正在使用Android的ARToolKit构建AR应用程序。我可以毫无问题地在OpenGL中应用投影矩阵和标记变换矩阵,如ARSimple示例中所述。然而,我没有找到一种方法来正确地将这些应用于jPCT AE相机。以下是我为相机所做的: Camera cam = world.getCamera(); Matrix projMatrix = new Matrix(); projMatrix.transformToGL(); projMatrix.setDump(ARToolKit.getInst

我正在使用Android的ARToolKit构建AR应用程序。我可以毫无问题地在OpenGL中应用投影矩阵和标记变换矩阵,如ARSimple示例中所述。然而,我没有找到一种方法来正确地将这些应用于jPCT AE相机。以下是我为相机所做的:

Camera cam = world.getCamera();
Matrix projMatrix = new Matrix();
projMatrix.transformToGL();
projMatrix.setDump(ARToolKit.getInstance().getProjectionMatrix());

cam.setPosition(projMatrix.getTranslation());
cam.setBack(projMatrix);
对于对象:

Matrix objMat = new Matrix();
objMat.transformToGL();
objMat.setDump(ARToolKit.getInstance().queryMarkerTransformation(markerID));
cube.setTranslationMatrix(objMat);
cube.setRotationMatrix(objMat);
它几乎可以工作:如果将标记放置在屏幕的中心,我可以看到3D对象。但是,当我移动标记时,它会很快从屏幕上消失。此外,立方体(以及我试图加载的其他模型)似乎以某种“反转”的方式呈现。 我在网上看到的ARToolKit矩阵是相对于OpenGL世界坐标的(而jPCT AE有自己的坐标),而且jPCT AE的投影矩阵是基于fov、远近剪裁平面、位置和旋转在内部构建的,因此我无法直接设置


如何将投影矩阵和标记矩阵转换为jPCT AE引擎?

回顾我的代码,jPCT-AE似乎无法从矩阵中正确获取位置和后向向量(尽管我看不出有任何原因),但当您将它们拆分为单独的向量时,它确实可以。这只是我反复试验的结果

这是我用方向和上方向向量为相机做的

float[] projection = ARToolKit.getInstance().getProjectionMatrix();
Matrix projMatrix = new Matrix();
projMatrix.setDump(projection);
projMatrix.transformToGL();
SimpleVector translation = projMatrix.getTranslation();
SimpleVector dir = projMatrix.getZAxis();
SimpleVector up = projMatrix.getYAxis();
mCamera.setPosition(translation);
mCamera.setOrientation(dir, up);
然后对于模型,我提取平移和旋转清除平移非常重要,因为它不是绝对位置,而是对当前位置的修改。我认为这可能是你的主要问题,为什么物体会移出屏幕

float[] transformation = ARToolKit.getInstance().queryMarkerTransformation(markerID);
Matrix dump = new Matrix();
dump.setDump(transformation);
dump.transformToGL();
mModel.clearTranslation();
mModel.translate(dump.getTranslation());
mModel.setRotationMatrix(dump);
另外,您应该在调用setDump之后执行transformToGl,我认为这就是您看到它们反转的原因


最后,为了优化,您应该在执行之间重用矩阵,而不是在每一帧创建一个新对象。

我这样做的成功程度稍微好一点(对象稍有偏差),我将在周一检查我的代码。我在这里发表评论只是想让你知道答案就要来了(免责声明:从我的头顶上看,你似乎和我做的一样)。