2017-10-13 59 views

回答

1

我有同樣的問題,這些天,我嘗試過2個解決方案,

frame.hitTest(MotionEvent)

2.項目從ARCORE世界頂點到2d在視圖座標

起初我用1.在飛機上得到命中姿勢,並與已經存在的3d物體的姿勢進行比較,但一旦3d物體離開飛機,這將不起作用。

最後我用2.來查看3D物體的頂點,然後用水龍頭位置做點擊測試。

如果你正在跟蹤的ARCORE樣品,你可以看到這條線在ObjectRenderer.java的繪製方法

Matrix.multiplyMM(mModelViewProjectionMatrix, 0, 
        cameraPerspective, 0, mModelViewMatrix, 0); 

「mModelViewProjectionMatrix」只是用這個ModelViewProjection矩陣來映射您已經添加3D對象的頂點從3d弧光世界到2D視圖。

以我爲例,我做這樣的事情,

pose.toMatrix(mAnchorMatrix, 0); 
objectRenderer.updateModelMatrix(mAnchorMatrix, 1); 
objectRenderer.draw(cameraView, cameraPerspective, lightIntensity); 

float[] centerVertexOf3dObject = {0f, 0f, 0f, 1}; 
float[] vertexResult = new float[4]; 
Matrix.multiplyMV(vertexResult, 0, 
        objectRenderer.getModelViewProjectionMatrix(), 0, 
        centerVertexOf3dObject, 0); 
// circle hit test 
float radius = (viewWidth/2) * (cubeHitAreaRadius/vertexResult[3]); 
float dx = event.getX() - (viewWidth/2) * (1 + vertexResult[0]/vertexResult[3]); 
float dy = event.getY() - (viewHeight/2) * (1 - vertexResult[1]/vertexResult[3]); 
double distance = Math.sqrt(dx * dx + dy * dy); 
boolean isHit = distance < radius; 

我ARCORE測量應用程序中使用此,
https://play.google.com/store/apps/details?id=com.hl3hl3.arcoremeasure

和源代碼, https://github.com/hl3hl3/ARCoreMeasure/blob/master/app/src/main/java/com/hl3hl3/arcoremeasure/ArMeasureActivity.java

相關問題