Example #1
0
            public ReflectorOptics(Vector3 pupilPosition,
                                   EllipsoidTransform ellipse,
                                   Transform Screen,
                                   Vector4 projectionParameters,
                                   Pose?headsetOrigin = null,
                                   Quaternion?optionalPupilRotation = null,
                                   bool updateEllipsoid             = true)
            {
                eyePosition = pupilPosition;

                bool didEllipsoidActuallyUpdate = false;

                if (updateEllipsoid)
                {
                    didEllipsoidActuallyUpdate = ellipse.UpdateEllipsoid();
                }
                sphereToWorldSpace = ellipse.sphereToWorldSpace;

                ellipseMajorAxis = ellipse.MajorAxis;
                ellipseMinorAxis = ellipse.MinorAxis;

                screenForward      = Screen.forward;
                screenPosition     = Screen.position;
                worldToScreenSpace = Screen.worldToLocalMatrix;
                cameraProjection   = projectionParameters;

                eyeRotation = Quaternion.identity;
                if (optionalPupilRotation.HasValue)
                {
                    var pupilRotation = optionalPupilRotation.Value;
                    if (optionalPupilRotation == default(Quaternion))
                    {
                        optionalPupilRotation = Quaternion.identity;
                    }
                    eyeRotation = pupilRotation;
                }

                if (headsetOrigin.HasValue)
                {
                    // If debugging this, helps to draw matrices with:
                    // var drawer = HyperMegaStuff.HyperMegaLines.drawer;
                    // (new Geometry.Sphere(radius)).DrawLines(
                    //   drawer.DrawLine,
                    //   overrideMatrix: aLocalToWorldMatrix);
                    var headsetWorldToLocal = headsetOrigin.Value.inverse.matrix;
                    eyePosition = headsetWorldToLocal.MultiplyPoint3x4(eyePosition);
                    eyeRotation = OpticalCalibrationManager.LossyMatrixMultQuaternion(
                        headsetWorldToLocal, eyeRotation
                        );
                    screenForward = headsetWorldToLocal.MultiplyVector(Screen.forward)
                                    .normalized;
                    screenPosition     = headsetWorldToLocal.MultiplyPoint3x4(Screen.position);
                    worldToScreenSpace = (headsetWorldToLocal * Screen.localToWorldMatrix)
                                         .inverse;
                    if (didEllipsoidActuallyUpdate)
                    {
                        sphereToWorldSpace = headsetWorldToLocal * sphereToWorldSpace;
                    }
                }
            }
Example #2
0
        public void RefreshIPD()
        {
            if (!isConfigured)
            {
                return;
            }
            Vector3 lPos = leftEyeIPDTransform.localPosition;
            Vector3 rPos = rightEyeIPDTransform.localPosition;

            lPos.x = -ipd / 2f; rPos.x = ipd / 2f;
            lPos.y = heightOffset; rPos.y = heightOffset;
            lPos.z = depthOffset; rPos.z = depthOffset;
            leftEyeIPDTransform.localPosition  = lPos;
            rightEyeIPDTransform.localPosition = rPos;

            leapTransform.localEulerAngles = new Vector3(pitchOffset, yawOffset, 0f);

            //if (Application.isPlaying) {
            //  leftScreenTransform.localPosition = startingScreenLeft + (leftScreenTransform.localRotation * Vector3.forward) * screenForwardOffset;
            //  rightScreenTransform.localPosition = startingScreenRight + (rightScreenTransform.localRotation * Vector3.forward) * screenForwardOffset;
            //}

            OpticalCalibrationManager manager = GetComponent <OpticalCalibrationManager>();

            if (manager != null)
            {
                manager.currentCalibration.leftEye.eyePosition  = lPos;
                manager.currentCalibration.rightEye.eyePosition = rPos;
                manager.UpdateCalibrationFromObjects();
            }

            leftEyeARRaytracer.ScheduleCreateDistortionMesh();
            rightEyeARRaytracer.ScheduleCreateDistortionMesh();
        }