在SceneView中展示模型时(不使用AR),我想使用正交摄影机。找不到在API中执行此操作的方法。我是否缺少某些东西或功能缺失?
最佳答案
据我所知,目前在ORTHO
/ARCore
中没有用于相机投影的 Sceneform
方法( cube frustum )。但是您可以通过4x4矩阵自己制作。因此,您要做的就是使用following principles计算left
,right
,top
,bottom
,near
和far
属性。
这是4x4投影矩阵的外观:
编辑:工作代码,其中scaleFactor
是大约1的值,而height
/width
是SceneView
的属性。
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)