javakotlinaugmented-realityarcoresceneform

ARCore – Rendering objects 200m far from camera


I'm working on Android AR project using ARCore and Sceneform. I need to place the objects from 30 meters to 200 meters far from user's camera and faced with the frustum culling issue in ArCore, described HERE.

I'm trying to set projection matrix to increase the far parameter using this method

public void getProjectionMatrix (float[] dest, 
                                 int offset, 
                                 float near, 
                                 float far);

But I can't find possibility to set the rendering projection matrix.

Here is my code:

arFragment.arSceneView.apply {
    scene.addOnUpdateListener {
        // Some code to return from this callback if arFrame is not initialised yet
        if (!objectsAdded) {
            placeObject(Pose.makeTranslation(0f, 100f, 100f), this)
            objectsAdded = true
            scene.camera.projectionMatrix = Matrix(computeProjectionMatrix(frame.camera))
            // P.S. frame.camera is ArCore's camera, scene.camera is Sceneform's one.
            // So, I'm not sure that using them in such way is consistent  
        }
    }
}

setProjectionMatrix method contains annotation VisibleForTesting. So, I'm not sure if I should use it and there is a guarantee that it will work.

Please, advice if I can do it in some other way? If no, what the best way to do far placed objects visible for user?

Thank you in advance.


Solution

  • There's no way to setup ARCamera's far clipping plane and near clipping plane in ARCore itself. You can only do it in your current rendering framework (Google Sceneform is officially deprecated, remember?) using corresponding settings.