@Override protected Vector3 interpolateVectors(final ReadOnlyVector3 from, final ReadOnlyVector3 to, final double delta, final Vector3 target) { assert (null != from) : "parameter 'from' can not be null"; assert (null != to) : "parameter 'to' can not be null"; return target.lerpLocal(from, to, delta); }
@Override protected Vector3 interpolateVectors(final ReadOnlyVector3 from, final ReadOnlyVector3 to, final double delta, final Vector3 target) { assert (null != from) : "parameter 'from' can not be null"; assert (null != to) : "parameter 'to' can not be null"; return target.lerpLocal(from, to, delta); }
@Override public void setCurrentSample(final int sampleIndex, final double progressPercent, final Object applyTo) { final TransformData transformData = (TransformData) applyTo; // shortcut if we are fully on one sample or the next if (progressPercent == 0.0f) { transformData.setRotation(_rotations[sampleIndex]); transformData.setTranslation(_translations[sampleIndex]); transformData.setScale(_scales[sampleIndex]); return; } else if (progressPercent == 1.0f) { transformData.setRotation(_rotations[sampleIndex + 1]); transformData.setTranslation(_translations[sampleIndex + 1]); transformData.setScale(_scales[sampleIndex + 1]); return; } // Apply (s)lerp and set in transform _compQuat1.slerpLocal(_rotations[sampleIndex], _rotations[sampleIndex + 1], progressPercent, _compQuat2); transformData.setRotation(_compQuat1); _compVect1.lerpLocal(_translations[sampleIndex], _translations[sampleIndex + 1], progressPercent); transformData.setTranslation(_compVect1); _compVect1.lerpLocal(_scales[sampleIndex], _scales[sampleIndex + 1], progressPercent); transformData.setScale(_compVect1); }
@Override public void setCurrentSample(final int sampleIndex, final double progressPercent, final Object applyTo) { final TransformData transformData = (TransformData) applyTo; // shortcut if we are fully on one sample or the next if (progressPercent == 0.0f) { transformData.setRotation(_rotations[sampleIndex]); transformData.setTranslation(_translations[sampleIndex]); transformData.setScale(_scales[sampleIndex]); return; } else if (progressPercent == 1.0f) { transformData.setRotation(_rotations[sampleIndex + 1]); transformData.setTranslation(_translations[sampleIndex + 1]); transformData.setScale(_scales[sampleIndex + 1]); return; } // Apply (s)lerp and set in transform _compQuat1.slerpLocal(_rotations[sampleIndex], _rotations[sampleIndex + 1], progressPercent, _compQuat2); transformData.setRotation(_compQuat1); _compVect1.lerpLocal(_translations[sampleIndex], _translations[sampleIndex + 1], progressPercent); transformData.setTranslation(_compVect1); _compVect1.lerpLocal(_scales[sampleIndex], _scales[sampleIndex + 1], progressPercent); transformData.setScale(_compVect1); }
interpolationVector.lerpLocal(trailVectors.get(i - 1).position, throttle);
@Test public void testLerp() { final Vector3 vec1 = new Vector3(8, 3, -2); final Vector3 vec2 = new Vector3(2, 1, 0); assertEquals(new Vector3(5, 2, -1), vec1.lerp(vec2, 0.5, null)); assertEquals(new Vector3(5, 2, -1), vec1.lerp(vec2, 0.5, new Vector3())); assertEquals(new Vector3(5, 2, -1), Vector3.lerp(vec1, vec2, 0.5, null)); assertEquals(new Vector3(5, 2, -1), Vector3.lerp(vec1, vec2, 0.5, new Vector3())); vec1.set(14, 5, 4); vec1.lerpLocal(vec2, 0.25); assertEquals(new Vector3(11, 4, 3), vec1); vec1.set(15, 7, 6); final Vector3 vec3 = new Vector3(-1, -1, -1); vec3.lerpLocal(vec1, vec2, 0.5); assertEquals(new Vector3(8.5, 4.0, 3.0), vec3); // coverage assertEquals(vec1.lerp(vec1, .25, null), vec1); assertEquals(vec2.lerpLocal(vec2, .25), vec2); assertEquals(vec2.lerpLocal(vec2, vec2, .25), vec2); assertEquals(Vector3.lerp(vec1, vec1, .25, null), vec1); }