在SceneView中展示模型时(不使用AR),我想使用正交摄影机。找不到在API中执行此操作的方法。我是否缺少某些东西或功能缺失?

最佳答案

据我所知,目前在ORTHO/ARCore中没有用于相机投影的 Sceneform 方法( cube frustum )。但是您可以通过4x4矩阵自己制作。因此,您要做的就是使用following principles计算leftrighttopbottomnearfar属性。
android - 如何在Sceneform Android SDK中将相机类型更改为“正交”?-LMLPHP
这是4x4投影矩阵的外观:
android - 如何在Sceneform Android SDK中将相机类型更改为“正交”?-LMLPHP
编辑:工作代码,其中scaleFactor是大约1的值,而height/widthSceneView的属性。

private fun buildOrthographicMatrix(right: Float,
                                      top: Float,
                                      far: Float,
                                     near: Float): FloatArray {
   val matrix = FloatArray(16)

   matrix[0] = 1 / right
   matrix[1] = 0f
   matrix[2] = 0f
   matrix[3] = 0f

   matrix[4] = 0f
   matrix[5] = 1 / top
   matrix[6] = 0f
   matrix[7] = 0f

   matrix[8] = 0f
   matrix[9] = 0f
   matrix[10] = -2 / (far - near)
   matrix[11] = 0f

   matrix[12] = 0f
   matrix[13] = 0f
   matrix[14] = -(far + near) / (far - near)
   matrix[15] = 1f

   return matrix
}

val newMatrix = buildOrthographicMatrix(1f / scaleFactor,
                                        1f / scaleFactor * height / width,
                                        30f,
                                        0.01f)

camera.projectionMatrix = Matrix(newMatrix)

10-08 17:06