Esempio n. 1
0
    /* Refines each sample index in between the start slider sample index and the end slider sample index. Uses a Hermite curve to give
     * ease-in ease-out functionality. Slices the work into two halves, one from the start slider sample index to the last sample index,
     * and one from the last sample index to the end sample index. */
    private void ApplyRefinement()
    {
        float percent;
        int   startSliderSampleIndex = DMS.SFS_GetStartSliderSampleIndex(); // For caching
        int   endSliderSampleIndex   = DMS.SFS_GetEndSliderSampleIndex();   // For caching

        Vector3 diff = transform.position - samplePositions[lastSampleIndex];

        // From range [start slider sample index, last sample index]
        for (int i = startSliderSampleIndex; i <= lastSampleIndex; i++)
        {
            percent = (i - startSliderSampleIndex) / ((float)lastSampleIndex - startSliderSampleIndex);
            float   hermitePercent = Mathfx.Hermite(0.0f, 1.0f, percent);
            Vector3 offset         = diff * hermitePercent;
            alternativeSamplePositions[i] = samplePositions[i];
            samplePositions[i]            = samplePositions[i] + offset;
        }

        diff = transform.position - samplePositions[lastSampleIndex + 1];
        // From range (last sample index, end slider sample index], going backwards
        for (int i = endSliderSampleIndex; i >= lastSampleIndex + 1; i--)
        {
            percent = (endSliderSampleIndex - i) / (float)(endSliderSampleIndex - lastSampleIndex - 1);
            float   hermitePercent = Mathfx.Hermite(0.0f, 1.0f, percent);
            Vector3 offset         = diff * hermitePercent;
            alternativeSamplePositions[i] = samplePositions[i];
            samplePositions[i]            = samplePositions[i] + offset;
        }
    }