Ejemplo n.º 1
0
        void UpdateTracking(bool bSetInitial)
        {
            if (bSetInitial || PositionMode == MovementMode.Static)
            {
                // [TODO] should damp out jitter while allowing larger moves
                if (bStaticUpdated == false)
                {
                    RootGameObject.transform.position = ActiveCamera.transform.position;
                    bStaticUpdated = true;
                }
            }
            else if (PositionMode == MovementMode.TrackOrientation)
            {
                RootGameObject.transform.position = ActiveCamera.transform.position;
                RootGameObject.transform.rotation = ActiveCamera.transform.rotation;
            }
            else if (PositionMode == MovementMode.CustomTracking && CustomTracker != null)
            {
                CustomTracker.UpdateTracking(this, ActiveCamera);
            }
            else
            {
                // MovemementMode.TrackPosition
                RootGameObject.transform.position = ActiveCamera.transform.position;
            }

            // apply post-rotations
            Quaternion rotateLR = Quaternion.AngleAxis(ShiftAngle, RootGameObject.transform.up);
            Quaternion rotateUp = Quaternion.AngleAxis(TiltAngle, rotateLR * RootGameObject.transform.right);

            RootGameObject.transform.rotation = rotateLR * rotateUp * RootGameObject.transform.rotation;
        }
Ejemplo n.º 2
0
        void UpdateTracking(bool bSetInitial)
        {
            if (bSetInitial || PositionMode == MovementMode.Static)
            {
                // [TODO] should damp out jitter while allowing larger moves
                if (bStaticUpdated == false)
                {
                    RootGameObject.SetPosition(ActiveCamera.GetPosition());
                    RootGameObject.SetRotation(Quaternionf.Identity);
                    bStaticUpdated = true;
                }
            }
            else if (PositionMode == MovementMode.TrackOrientation)
            {
                RootGameObject.SetPosition(ActiveCamera.GetPosition());
                RootGameObject.SetRotation(ActiveCamera.GetRotation());
            }
            else if (PositionMode == MovementMode.CustomTracking && CustomTracker != null)
            {
                CustomTracker.UpdateTracking(this, ActiveCamera);
            }
            else
            {
                // MovemementMode.TrackPosition
                RootGameObject.SetPosition(ActiveCamera.GetPosition());
                RootGameObject.SetRotation(Quaternionf.Identity);
            }

            // apply post-rotations
            Frame3f     frame    = RootGameObject.GetWorldFrame();
            Quaternionf rotateLR = Quaternionf.AxisAngleD(frame.Y, ShiftAngle);
            Quaternionf rotateUp = Quaternionf.AxisAngleD(rotateLR * frame.X, TiltAngle);

            RootGameObject.SetRotation(rotateLR * rotateUp * RootGameObject.GetRotation());


            // camera-tracking GO always tracks camera
            onCameraGO.SetPosition(ActiveCamera.GetPosition());
            onCameraGO.SetRotation(ActiveCamera.GetRotation());
        }