updateCamera method
Updates the state of the XR camera. Use this method on app level if you
set cameraAutoUpdateto
false`. The method requires the non-XR
camera of the scene as a parameter. The passed in camera's transformation
is automatically adjusted to the position of the XR camera when calling
this method.
@param {Camera} camera - The camera.
Implementation
@override
void updateCamera(Camera camera ) {
if ( session == null ) return;
double depthNear = camera.near;
double depthFar = camera.far;
if ( depthSensing.texture != null ) {
if ( depthSensing.depthNear > 0 ) depthNear = depthSensing.depthNear;
if ( depthSensing.depthFar > 0 ) depthFar = depthSensing.depthFar;
}
cameraXR.near = cameraR.near = cameraL.near = depthNear;
cameraXR.far = cameraR.far = cameraL.far = depthFar;
if ( _currentDepthNear != cameraXR.near || _currentDepthFar != cameraXR.far ) {
// Note that the new renderState won't apply until the next frame. See #18320
session?.updateRenderState({
'depthNear': cameraXR.near,
'depthFar': cameraXR.far
}.jsify());
_currentDepthNear = cameraXR.near;
_currentDepthFar = cameraXR.far;
}
cameraL.layers.mask = camera.layers.mask | int.parse("010", radix: 2);
cameraR.layers.mask = camera.layers.mask | int.parse("100", radix: 2);
cameraXR.layers.mask = cameraL.layers.mask | cameraR.layers.mask;
final parent = camera.parent;
final cameras = cameraXR.cameras;
_updateCamera( cameraXR, parent );
for (int i = 0; i < cameras.length; i ++ ) {
_updateCamera( cameras[ i ], parent );
}
// update projection matrix for proper view frustum culling
if ( cameras.length == 2 ) {
setProjectionFromUnion( cameraXR, cameraL, cameraR );
}
else {
// assume single camera setup (AR)
cameraXR.projectionMatrix.setFrom( cameraL.projectionMatrix );
}
// update user camera and its children
updateUserCamera( camera, cameraXR, parent );
}