kotlin 如何在Sceneform Android SDK中将相机类型更改为正交?

gdx19jrr  于 2023-02-24  发布在  Kotlin
关注(0)|答案(1)|浏览(107)

我想在SceneView(不带AR)中展示模型时使用正交相机。在API中找不到这样做的方法。是我遗漏了什么还是功能缺失了?

qjp7pelc

qjp7pelc1#

ARCore和场景形式

据我所知,没有原生的**ORTHO**方法(立方体截锥),用于当前ARCore/Sceneform中的摄像机投影。但您可以使用4x 4矩阵手动进行。因此,您需要做的就是计算leftrighttopbottomnearfar属性的值。

下面是您的投影矩阵4x 4的外观:

编辑:工作代码,其中scaleFactor是大约1.3的值,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)

相关问题