将物体放置在人上方30米处

时间:2019-02-26 21:07:35

标签: java kotlin augmented-reality arcore frustum

是否可以将物体放置在高30或50米的人上方?

当我尝试放置链接到锚点的对象时,它在20米内可见,而在40米内不可见?

为什么会发生这种情况,我该如何配置?

1 个答案:

答案 0 :(得分:3)

这是ARCore中的frustum culling问题-不在视锥台可见区域内的对象将不会被渲染。通常,Android设备中的FoV(视场)水平约60度(垂直光圈取决于纵横比)。 Viewing frustum culling是从渲染过程中删除完全位于视锥范围之外的对象的过程,从而显着减少了CPU和GPU的计算负担。而且请不要忘记,远近裁切平面也是平截头体的一部分。

  

要正确设置对象的可见性,只需使用以下建议即可找到HEREHERE

enter image description here

  

要了解有关frustum culling的更多信息,请阅读this useful article

要返回用于渲染内容的投影矩阵,请使用以下java方法:

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

我可以在MainActivity.java文件中以这种方式使用它:

// Getting Projection Matrix
float[] projectionMtx = new float[16];
arSession.getProjectionMatrix(projectionMtx, 0, 0.5f, 201.0f);

// Setting Projection Matrix
arRenderer.setProjectionMatrix(projectionMtx);

...或在MainActivity.kt文件中以这种方式:

// Getting Projection Matrix
private fun computeProjectionMatrix(): FloatArray {
    val projectionMtx = FloatArray(16)
    session.getProjectionMatrix(projectionMtx, 0, 0.5f, 201.0f)
    return projectionMtx
}

// Setting Projection Matrix
renderer.setProjectionMatrix(computeProjectionMatrix())

希望这会有所帮助。