I'd like to use an Orthographic camera when presenting a model in SceneView (without AR). Couldn't find a way to do so in API. Am I missing something or the feature is missing?
As far as I know, there's no native ORTHO
method (cube frustum) for camera projection in ARCore
/ Sceneform
at the moment. But you can make it manually using 4x4 Matrix. So, all you need to do is to calculate left
, right
, top
, bottom
, near
and far
properties using the following principles.
Here is how your projection matrix 4x4 must look like:
Edit: working code where scaleFactor
is a value around 1.3 and height
/width
are properties of the 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)