/// <summary> /// Creates a new monoscopic camera. /// </summary> /// <param name="preserveAspectRatio">Preserves the aspect ratio of the video /// background and augmentations as the screen size changes.</param> public MonoCamera(DisplayManager displayManager, bool preserveAspectRatio) : base(displayManager) { this.preserveAspectRatio = preserveAspectRatio; this.opticalSeeThrough = false; gameObject = new GameObject("Mono Camera"); // set camera pose gameObject.transform.SetParent(displayManager.transform, false); if (useImuPose) { gameObject.transform.localPosition = Vector3.zero; gameObject.transform.localRotation = Quaternion.identity; } else { float[] posRaw = new float[3]; float[] rotRaw = new float[4]; DSHUnityPlugin.CameraGetPose(posRaw, rotRaw); gameObject.transform.localPosition = ServiceManager.Vector3FromFloatArray(posRaw); #if !UNITY_EDITOR gameObject.transform.localRotation = ServiceManager.QuaternionFromFloatArray(rotRaw); #endif } camera = gameObject.AddComponent <Camera> (); InitCamera(camera); ServiceManager.Instance.VisionParametersAvailable += Resize; DisplayManager.Instance.ScreenSizeChanged += Resize; }
void Setup() { float[] posRaw = new float[3]; float[] rotRaw = new float[4]; DSHUnityPlugin.CameraGetPose(posRaw, rotRaw); float visionAspect = ServiceManager.Instance.GetVisionAspectRatio(); float dist = ServiceManager.Instance.GetFarClipPlane() * 0.95f; float halfFov = Mathf.Deg2Rad * (ServiceManager.Instance.GetVisionFieldOfView() / 2.0f); float height = Mathf.Tan(halfFov) * dist * 2.0f; float width = visionAspect * height; //var rot = ServiceManager.QuaternionFromFloatArray (rotRaw); transform.localPosition = /*ServiceManager.Vector3FromFloatArray(posRaw) + rot * */ (new Vector3(0.0f, 0.0f, dist)); #if !UNITY_EDITOR //transform.localRotation = rot; #endif transform.localScale = new Vector3(width, -height, 1.0f); }