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?
How to change camera type to Orthographic in Sceneform Android SDK?
ARCore and Sceneform
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)
Thanks. What is scaleFactor? How do you calculate it? If sceneView is full screen, width and height equal to screen dimensions? What is the influence of far and near parameters on the result of the projection? If I want a pseudo perfect ortho projection, should I set near to 0 and far to a very big value? Thanks. –
Mammoth
Please, read these three posts: forum.unity.com/threads/… and en.wikipedia.org/wiki/3D_projection and gamedev.stackexchange.com/questions/64423/… –
Aleen
© 2022 - 2024 — McMap. All rights reserved.