internal void CalculateCameraParameters(NativeCameraState nativeCameraState, out DoubleVector3 cameraPositionECEF, out DoubleVector3 interestPointECEF, out Vector3 cameraUpECEF) { var scaledInterestPoint = ScaleInterestPointWithEnvironmentFlattening(nativeCameraState.interestPointECEF); Vector3 forward, up; DoubleVector3 positionECEF; CameraHelpers.CalculateLookAt( scaledInterestPoint, nativeCameraState.interestBasisForwardECEF, nativeCameraState.pitchDegrees * Mathf.Deg2Rad, nativeCameraState.distanceToInterestPoint, out positionECEF, out forward, out up); interestPointECEF = scaledInterestPoint; cameraPositionECEF = positionECEF; cameraUpECEF = up; }
internal void ApplyNativeCameraState(NativeCameraState nativeCameraState, UnityEngine.Camera controlledCamera) { controlledCamera.fieldOfView = nativeCameraState.fieldOfViewDegrees; controlledCamera.nearClipPlane = nativeCameraState.nearClipPlaneDistance; controlledCamera.farClipPlane = nativeCameraState.farClipPlaneDistance; var interestBasis = new EcefTangentBasis( nativeCameraState.interestPointECEF, nativeCameraState.interestBasisRightECEF, nativeCameraState.interestBasisUpECEF, nativeCameraState.interestBasisForwardECEF); Vector3 forward, up; DoubleVector3 positionECEF; CameraHelpers.CalculateLookAt( interestBasis.PointEcef, interestBasis.Forward, nativeCameraState.pitchDegrees * Mathf.Deg2Rad, nativeCameraState.distanceToInterestPoint, out positionECEF, out forward, out up); m_interestPointProvider.UpdateFromNative(nativeCameraState.interestPointECEF); if (m_coordinateSystem == CoordinateSystem.ECEF) { var position = (positionECEF - m_originECEF).ToSingleVector(); controlledCamera.transform.position = position; controlledCamera.transform.LookAt((interestBasis.PointEcef - m_originECEF).ToSingleVector(), up); } else // if (m_coordinateSystem == CoordinateSystem.UnityWorld) { controlledCamera.transform.position = m_frame.ECEFToLocalSpace(positionECEF); controlledCamera.transform.LookAt(m_frame.ECEFToLocalSpace(interestBasis.PointEcef), m_frame.ECEFToLocalRotation * up); } }