我正在使用ARToolKit为安卓构建一个AR应用程序。我可以在OpenGL中应用投影矩阵和标记变换矩阵,这在ARSimple示例中得到了解释。然而,我没有找到一种方法来正确地将这些应用于jPCT相机.以下是我对摄像机所做的事情:
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有它自己的坐标),而且jPCT的投影矩阵是基于fov,近和远裁剪平面,位置和旋转,然后我不能直接设置它。
如何将投影矩阵和标记矩阵转换为jPCT引擎?
发布于 2015-09-21 09:04:29
回顾我的代码,似乎JPCT没有从矩阵中正确地得到位置向量和向后向量(虽然我没有看到为什么它没有得到),但是当您将它们分割成不同的向量时,它就得到了。这只是我在试验和错误中的发现。
这就是我是如何为相机做的,使用方向和向上向量。
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);另外,您应该在调用transformToGl之后执行setDump,我认为这就是为什么会看到它们倒置的原因。
最后,为了优化,您应该重用执行之间的矩阵,而不是为每个框架创建一个新的对象。
https://stackoverflow.com/questions/32661506
复制相似问题