Esempio n. 1
0
    /// <summary>
    /// Starts this instance.
    /// </summary>
    private void Start()
    {
        if (this.OnConfigureVrModeParms != null)
        {
            this.OnConfigureVrModeParms();
        }
#if UNITY_ANDROID && !UNITY_EDITOR
        MiHMD.EyeParameter leftEyeDesc = this.Hmd.GetEyeParameter(Eyes.Left);
        Vector2            resolution  = leftEyeDesc.Resolution;
        SetEyeParms((int)resolution.x, (int)resolution.y);

        this.InitRenderThread();
#endif
    }
Esempio n. 2
0
    /// <summary>
    /// Configures the camera.
    /// </summary>
    /// <param name="eye">The eye.</param>
    /// <returns>the camera relate to the eye</returns>
    private Camera ConfigureCamera(Eyes eye)
    {
        if (eye == Eyes.Center)
        {
            Camera centerEye = this.CenterEyeTransform.GetComponent <Camera>();

            // Clearing nothing to make sure the output image is not affected by this camera
            this.CenterEyeCamera.clearFlags = CameraClearFlags.Nothing;

            return(centerEye);
        }

        Transform anchor = eye == Eyes.Left ? this.LeftEyeTransform : this.RightEyeTransform;
        Camera    cam    = anchor.GetComponent <Camera>();

#if UNITY_ANDROID && !UNITY_EDITOR
        MiHMD.EyeParameter eyeDesc = VrManager.Instance.Hmd.GetEyeParameter(eye);

        cam.fieldOfView   = eyeDesc.Fov.y;
        cam.aspect        = eyeDesc.Resolution.x / eyeDesc.Resolution.y;
        cam.rect          = new Rect(0f, 0f, 1.0f, 1.0f);
        cam.targetTexture = VrManager.Instance.Hmd.GetEyeSceneTexture(eye);
        cam.hdr           = VrManager.Instance.IsHdrEnabled;

        // Enforce camera render order
        cam.depth = (eye == Eyes.Left) ?
                    (int)PluginEvents.LeftEyeEndFrame :
                    (int)PluginEvents.RightEyeEndFrame;

        // AA is documented to have no effect in deferred, but it causes black screens.
        if (cam.actualRenderingPath == RenderingPath.DeferredLighting)
        {
            QualitySettings.antiAliasing = 0;
        }
#elif UNITY_EDITOR || UNITY_STANDALONE_WIN
        cam.fieldOfView = 97.5f;
        if (eye == Eyes.Left)
        {
            cam.rect = new Rect(0.0f, 0.0f, 0.5f, 1.0f);
        }
        else
        {
            cam.rect = new Rect(0.5f, 0.0f, 0.5f, 1.0f);
        }

        cam.targetTexture = MiEmulation.Instance.StereoRT;
        cam.hdr           = VrManager.Instance.IsHdrEnabled;
        cam.depth         = 0;
        if (cam.actualRenderingPath == RenderingPath.DeferredLighting || cam.actualRenderingPath == RenderingPath.DeferredShading)
        {
            QualitySettings.antiAliasing = 0;
        }

        cam.enabled = true;
#endif

        // Gaze cursor render to a different texture.
#if UNITY_ANDROID && !UNITY_EDITOR
        Camera[] gazeGameras = new Camera[] { this.LeftEyeGazeCursorCamera, this.RightEyeGazeCursorCamera };
        Camera   gazeCamera  = gazeGameras[(int)eye];
        cam.cullingMask &= ~reticleLayerMask;
        if (gazeCamera)
        {
            gazeCamera.clearFlags       = CameraClearFlags.SolidColor;
            gazeCamera.backgroundColor  = Color.clear;
            gazeCamera.cullingMask      = reticleLayerMask;
            gazeCamera.orthographic     = cam.orthographic;
            gazeCamera.orthographicSize = cam.orthographicSize;
            gazeCamera.aspect           = cam.aspect;
            gazeCamera.fieldOfView      = cam.fieldOfView;
            gazeCamera.nearClipPlane    = cam.nearClipPlane;
            gazeCamera.farClipPlane     = cam.farClipPlane;
            gazeCamera.rect             = cam.rect;
            // make sure gazeCamera render before scene camera.
            gazeCamera.depth         = cam.depth - 1;
            gazeCamera.renderingPath = cam.renderingPath;
            gazeCamera.hdr           = cam.hdr;
            gazeCamera.targetTexture = VrManager.Instance.Hmd.GetEyeGazeTexture(eye);
        }
#endif

        return(cam);
    }