Esempio n. 1
0
    public void OnTrackablesUpdated()
    {
        if (rotations.Count >= smoothingFrames)
        {
            rotations.Dequeue();
            positions.Dequeue();
        }

        rotations.Enqueue(transform.rotation);
        positions.Enqueue(transform.position);

        Vector4 avgr = Vector4.zero;

        foreach (Quaternion singleRotation in rotations)
        {
            Math3d.AverageQuaternion(ref avgr, singleRotation, rotations.Peek(), rotations.Count);
        }

        Vector3 avgp = Vector3.zero;

        foreach (Vector3 singlePosition in positions)
        {
            avgp += singlePosition;
        }
        avgp /= positions.Count;

        smoothedRotation = new Quaternion(avgr.x, avgr.y, avgr.z, avgr.w);
        smoothedPosition = avgp;
    }
Esempio n. 2
0
    // Update is called once per frame
    void Update()
    {
        if (nonVuforiaTracker != null && !isAnimating)
        {
            Vector3    v3 = new Vector3(nonVuforiaTracker.position.x, nonVuforiaTracker.position.y, nonVuforiaTracker.position.z);
            Quaternion r3 = nonVuforiaTracker.rotation;

            if (rotations.Count >= smoothingFrames)
            {
                rotations.Dequeue();
                positions.Dequeue();
            }

            rotations.Enqueue(r3);
            positions.Enqueue(v3);

            Vector4 avgr = Vector4.zero;
            foreach (Quaternion singleRotation in rotations)
            {
                Math3d.AverageQuaternion(ref avgr, singleRotation, rotations.Peek(), rotations.Count);
            }

            Vector3 avgp = Vector3.zero;
            foreach (Vector3 singlePosition in positions)
            {
                avgp += singlePosition;
            }
            avgp /= positions.Count;

            smoothedRotation = new Quaternion(avgr.x, avgr.y, avgr.z, avgr.w);
            smoothedPosition = avgp;

            transform.position = smoothedPosition;
            transform.rotation = smoothedRotation;
        }
    }
Esempio n. 3
0
    // Update is called once per frame
    void Update()
    {
        if (trackingmarker != null && !isAnimating && trackingmarker.isActiveAndEnabled)
        {
            Vector3    v3 = new Vector3(trackingmarker.transform.position.x + locationoffset.x, trackingmarker.transform.position.y + locationoffset.y, trackingmarker.transform.position.z + locationoffset.z);
            Quaternion r3 = trackingmarker.transform.rotation * rotationoffset;

            if (rotations.Count >= smoothingFrames)
            {
                rotations.Dequeue();
                positions.Dequeue();
            }

            rotations.Enqueue(r3);
            positions.Enqueue(v3);

            Vector4 avgr = Vector4.zero;
            foreach (Quaternion singleRotation in rotations)
            {
                Math3d.AverageQuaternion(ref avgr, singleRotation, rotations.Peek(), rotations.Count);
            }

            Vector3 avgp = Vector3.zero;
            foreach (Vector3 singlePosition in positions)
            {
                avgp += singlePosition;
            }
            avgp /= positions.Count;

            smoothedRotation = new Quaternion(avgr.x, avgr.y, avgr.z, avgr.w);
            smoothedPosition = avgp;

            transform.position = smoothedPosition;
            transform.rotation = smoothedRotation;
        }
    }
    public void OnTrackablesUpdated()
    {
        // --------------------------------------------------------------------------
        // Position

        // Optional low pass filter
        if (filterPosition)
        {
            if (cameraPositionFilter != null)
            {
                position = cameraPositionFilter.Append(transform.position);
            }
            else
            {
                cameraPositionFilter = new LowPassFilter <Vector3>(FILTER_ALPHA, transform.position);
                position             = transform.position;
            }

            Debug.Log("position delta = " + (transform.position.x - position.x) + ", " + (transform.position.y - position.y) + ", " + (transform.position.z - position.z));
        }
        else
        {
            position = transform.position;
        }

        // Optional smoothing
        if (smoothPosition)
        {
            if (smoothingPositions.Count >= smoothingFrames)
            {
                smoothingPositions.Dequeue();
            }
            smoothingPositions.Enqueue(position);

            Vector3 avgp = Vector3.zero;
            foreach (Vector3 singlePosition in smoothingPositions)
            {
                avgp += singlePosition;
            }
            position = avgp / smoothingPositions.Count;
        }

        //Debug.Log("position = " + position.x + ", " + position.y + ", " + position.z);

        // --------------------------------------------------------------------------
        // ROTATION

        // Optional low pass filter
        if (filterPosition)
        {
            if (cameraPositionFilter != null)
            {
                rotation = cameraRotationFilter.Append(transform.rotation);
            }
            else
            {
                cameraRotationFilter = new LowPassFilter <Quaternion>(FILTER_ALPHA, transform.rotation);
                rotation             = transform.rotation;
            }
        }
        else
        {
            rotation = transform.rotation;
        }

        // Optional smoothing
        if (smoothRotation)
        {
            if (smoothingRotations.Count >= smoothingFrames)
            {
                smoothingRotations.Dequeue();
            }
            smoothingRotations.Enqueue(rotation);

            Vector4 avgr = Vector4.zero;
            foreach (Quaternion singleRotation in smoothingRotations)
            {
                Math3d.AverageQuaternion(ref avgr, singleRotation, smoothingRotations.Peek(), smoothingRotations.Count);
            }

            rotation = new Quaternion(avgr.x, avgr.y, avgr.z, avgr.w);
        }
    }