簡體   English   中英

在 Android 中集成 jPCT-AE 和 ARToolKit

[英]Integrating jPCT-AE and ARToolKit in Android

我正在使用 ARToolKit for Android 來構建 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,我認為這就是您看到它們反轉的原因。

最后,您應該在執行之間重用矩陣,而不是每幀創建一個新對象,以進行優化。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM