Esempio n. 1
0
    private void updateCameraManip()
    {
        var prevState = cameraManipState;

        cameraManipState = getCameraManipState();

        bool leftPressed  = cameraManipButton.GetState(SteamVR_Input_Sources.LeftHand);
        bool rightPressed = cameraManipButton.GetState(SteamVR_Input_Sources.RightHand);

        var leftPos  = leftController.transform.position;
        var rightPos = rightController.transform.position;
        var midpoint = leftPressed && rightPressed ? (leftPos + rightPos) / 2f
            : leftPressed ? leftPos
            : rightPressed ? rightPos
            : Vector3.zero;

        var dist = leftPressed && rightPressed?Vector3.Distance(leftPos, rightPos)
                       : 1f;

        if (cameraManipState != prevState)
        {
            Debug.Log("switching from " + prevState + " to " + cameraManipState);
            initialLeftPos  = leftPos;
            initialRightPos = rightPos;
            initialScale    = worldScale;
            initialOrigin   = transform.position;
            initialRotation = transform.rotation;

            initialMidpoint = midpoint;
            initialDist     = dist;
        }
        else if (cameraManipState != CameraManipState.None)
        {
            Debug.Log("updating with " + cameraManipState);

            var offset = midpoint - initialMidpoint;
            var scale  = initialScale * dist / initialDist * scaleSpeed;
            scale = Mathf.Clamp(scale, minScale, maxScale);

            var newOrigin = (initialOrigin / initialScale + offset * moveSpeed) * scale;
            worldScale = scale;

            if (scale != worldScale)
            {
                worldScale           = scale;
                transform.localScale = Vector3.one / worldScale;
            }
            if (newOrigin != worldOrigin)
            {
                worldOrigin        = newOrigin;
                transform.position = worldOrigin;
            }

            // apply rotation iff two controllers active
            if (cameraManipState == CameraManipState.TransformWithBothControllers)
            {
                var delta        = leftPos - rightPos;
                var initialDelta = initialLeftPos - initialRightPos;
                var newRotation  = getRotation(delta, initialDelta);
                transform.rotation = newRotation;
            }
        }
    }
Esempio n. 2
0
    private void updateCameraManip()
    {
        var prevState = cameraManipState;

        cameraManipState = getCameraManipState();

        bool leftPressed  = cameraManipButton.GetState(SteamVR_Input_Sources.LeftHand);
        bool rightPressed = cameraManipButton.GetState(SteamVR_Input_Sources.RightHand);

        var leftPos  = leftController.transform.position;
        var rightPos = rightController.transform.position;
        var midpoint = leftPressed && rightPressed ? (leftPos + rightPos) / 2f
            : leftPressed ? leftPos
            : rightPressed ? rightPos
            : Vector3.zero;

        var dist = leftPressed && rightPressed?Vector3.Distance(leftPos, rightPos)
                       : 1f;

        if (cameraManipState != prevState)
        {
            Debug.Log("switching from " + prevState + " to " + cameraManipState);
            initialLeftPos  = leftPos;
            initialRightPos = rightPos;
            initialScale    = worldScale;
            initialOrigin   = transform.position;
            initialRotation = transform.rotation;

            initialMidpoint = midpoint;
            initialDist     = dist;
        }
        else if (cameraManipState != CameraManipState.None)
        {
            Debug.Log("updating with " + cameraManipState);

            var offset = midpoint - initialMidpoint;
            var scale  = initialScale * dist / initialDist;
            //  scale = Mathf.Clamp(scale, minScale, maxScale);

            var newOrigin = initialOrigin + offset;
            inverseTranslateTransform.position = initialOrigin + offset;
            translateTransform.position        = initialOrigin - offset;
            scaleTransform.localScale          = Vector3.one * Mathf.Pow(scale / initialScale, 2f);



            //  var newOrigin = (initialOrigin + offset) * (scale / initialScale + 1f);
            //var newOrigin = (initialOrigin / initialScale + offset) *scale;
            //var newOrigin = initialOrigin * (1f - scale / initialScale) + offset;
            // initialOrigin - initialOrigin / scale * initialScale;
            //     (initialOrigin / initialScale + offset) * scale;

            /*if (scale != worldScale)
             * {
             *  worldScale = scale;
             *  scaleTransform.localScale = Vector3.one * worldScale;
             * }
             * if (newOrigin != worldOrigin)
             * {
             *  Debug.Log(newOrigin);
             *  worldOrigin = newOrigin;
             *  translateTransform.position = worldOrigin;
             * }
             */
            // apply rotation iff two controllers active

            /* if (cameraManipState == CameraManipState.TransformWithBothControllers)
             * {
             *   var delta = leftPos - rightPos;
             *   var initialDelta = initialLeftPos - initialRightPos;
             *   var newRotation = getRotation(delta, initialDelta);
             *   transform.rotation = newRotation;
             * }*/
        }
    }