Difference between revisions of "Interpolation"

From Second Life Wiki
Jump to navigation Jump to search
 
(16 intermediate revisions by the same user not shown)
Line 1: Line 1:
{{LSL Header}}
{{LSL Header}}
{{RightToc|clear:right;}}


== Interpolation Library ==
Interpolation is a way of constructing new data points within a range of known data points.


The range of applications is varied, but here in SL it can most directly be used for animating and/or moving prims or linksets via any attribute you can creatively make use of.


=== Float Functions ===
Attributes:
* Prim/Object Position
* Prim/Object Rotation
* Texture Scale/Offsets
* or you can just simply interpolate internal values


<!--############# FLOAT LINEAR #############-->
Potential applications:
{|cellspacing="0" cellpadding="3" border="1" style="border: 1px solid #aaaaaa; margin: 1em 1em 1em 0pt; background-color: #ffffff; border-collapse: collapse" width="80%"
* Movement
!style="color: #000000; background-color: #aaaaff;" height="20px"|
* Animation
Float Linear
* User Interfaces
|-
* Graphics
|
* Games
Linear interpolation of f0 and f1 with fraction t.
<lsl>
float fLin(float f0, float f1,float t){
    return f0*(1-t) + f1*t;}
</lsl>


{|cellspacing="0" cellpadding="3" border="1" style="border: 1px solid #aaaaaa; margin: 1em 1em 1em 0pt; background-color: #ffffff; border-collapse: collapse" width="80%"
There are many different types of interpolation, which may exhibit different preferred or controllable behaviour.
|
{|cellspacing="0" cellpadding="6" border="1" style="border: 1px solid #aaaaaa; margin: 1em 1em 1em 0pt; background-color: #e0e0ff; border-collapse: collapse"
!style="background-color: #d0d0ee" | Input
!style="background-color: #d0d0ee" | Description
|-
| float f0
| Start, 0.0
|-
| float f1
| End, 1.0
|-
| float t
| Fraction of interpolation
|-
!style="background-color: #d0d0ee" | Output
!style="background-color: #d0d0ee" | Description
|-
| return float fLin
| Returns linear interpolation of two floats
|}
| Graph goes here, k.
|}
<div style="float:right;font-size: 80%;">
By Nexii Malthus</div>
|}


<!--############# FLOAT COSINE #############-->
{|cellspacing="0" cellpadding="3" border="1" style="border: 1px solid #aaaaaa; margin: 1em 1em 1em 0pt; background-color: #ffffff; border-collapse: collapse" width="80%"
!style="color: #000000; background-color: #aaaaff;" height="20px"|
Float Cosine
|-
|
Cosine interpolation of f0 and f1 with fraction t.
<lsl>
float fCos(float v0,float v1,float t){
    float F = (1 - llCos(t*PI))/2;
    return v0*(1-F)+v1*F;}
</lsl>


{|cellspacing="0" cellpadding="3" border="1" style="border: 1px solid #aaaaaa; margin: 1em 1em 1em 0pt; background-color: #ffffff; border-collapse: collapse" width="80%"
|
{|cellspacing="0" cellpadding="6" border="1" style="border: 1px solid #aaaaaa; margin: 1em 1em 1em 0pt; background-color: #e0e0ff; border-collapse: collapse"
!style="background-color: #d0d0ee" | Input
!style="background-color: #d0d0ee" | Description
|-
| float f0
| Start, 0.0
|-
| float f1
| End, 1.0
|-
| float t
| Fraction of interpolation
|-
!style="background-color: #d0d0ee" | Output
!style="background-color: #d0d0ee" | Description
|-
| return float fCos
| Returns cosine interpolation of two floats
|}
| Graph goes here, k.
|}
<div style="float:right;font-size: 80%;">
By Nexii Malthus</div>
|}


<!--############# FLOAT CUBIC #############-->
== Interpolation Library ==
{|cellspacing="0" cellpadding="3" border="1" style="border: 1px solid #aaaaaa; margin: 1em 1em 1em 0pt; background-color: #ffffff; border-collapse: collapse" width="80%"
!style="color: #000000; background-color: #aaaaff;" height="20px"|
Float Cubic
|-
|
Cubic interpolation of f0, f1, f2 and f3 with fraction t.
<lsl>
float fCub(float f0,float f1,float f2,float f3,float t){
    float P = (f3-f2)-(f0-f1);float Q = (f0-f1)-P;float R = f2-f0;float S = f1;
    return P*llPow(t,3) + Q*llPow(t,2) + R*t + S;}
</lsl>
 
{|cellspacing="0" cellpadding="3" border="1" style="border: 1px solid #aaaaaa; margin: 1em 1em 1em 0pt; background-color: #ffffff; border-collapse: collapse" width="80%"
|
{|cellspacing="0" cellpadding="6" border="1" style="border: 1px solid #aaaaaa; margin: 1em 1em 1em 0pt; background-color: #e0e0ff; border-collapse: collapse"
!style="background-color: #d0d0ee" | Input
!style="background-color: #d0d0ee" | Description
|-
| float f0
| Modifier, 0.33~
|-
| float f1
| Start, 0.0
|-
| float f2
| End, 1.0
|-
| float f3
| Modifier, 0.66~
|-
| float t
| Fraction of interpolation
|-
!style="background-color: #d0d0ee" | Output
!style="background-color: #d0d0ee" | Description
|-
| return float fCub
| Returns cubic interpolation of four floats
|}
| Graph goes here, k.
|}
<div style="float:right;font-size: 80%;">
By Nexii Malthus</div>
|}
 
<!--############# FLOAT HERMITE #############-->
{|cellspacing="0" cellpadding="3" border="1" style="border: 1px solid #aaaaaa; margin: 1em 1em 1em 0pt; background-color: #ffffff; border-collapse: collapse" width="80%"
!style="color: #000000; background-color: #aaaaff;" height="20px"|
Float Hermite
|-
|
Hermite interpolation of f0, f1, f2 and f3 with fraction t, tension and bias.
<lsl>
float fHem(float f0,float f1,float f2,float f3,float t,float tens,float bias){
    float t2 = t*t;float t3 = t2*t;
    float a0 =  (f1-f0)*(1+bias)*(1-tens)/2;
          a0 += (f2-f1)*(1-bias)*(1-tens)/2;
    float a1 =  (f2-f1)*(1+bias)*(1-tens)/2;
          a1 += (f3-f2)*(1-bias)*(1-tens)/2;
    float b0 =  2*t3 - 3*t2 + 1;
    float b1 =    t3 - 2*t2 + t;
    float b2 =    t3 -  t2;
    float b3 = -2*t3 + 3*t2;
    return (  b0  *  f1+b1  *  a0+b2  *  a1+b3  *  f2  );}
</lsl>
 
{|cellspacing="0" cellpadding="3" border="1" style="border: 1px solid #aaaaaa; margin: 1em 1em 1em 0pt; background-color: #ffffff; border-collapse: collapse" width="80%"
|
{|cellspacing="0" cellpadding="6" border="1" style="border: 1px solid #aaaaaa; margin: 1em 1em 1em 0pt; background-color: #e0e0ff; border-collapse: collapse"
!style="background-color: #d0d0ee" | Input
!style="background-color: #d0d0ee" | Description
|-
| float f0
| Modifier, 0.33~
|-
| float f1
| Start, 0.0
|-
| float f2
| End, 1.0
|-
| float f3
| Modifier, 0.66~
|-
| float t
| Fraction of interpolation
|-
| float tens
| Tension of interpolation
|-
| float bias
| Bias of interpolation
|-
!style="background-color: #d0d0ee" | Output
!style="background-color: #d0d0ee" | Description
|-
| return float fHem
| Returns hermite interpolation of four floats with tension and bias
|}
| Graph goes here, k.
|}
<div style="float:right;font-size: 80%;">
By Nexii Malthus</div>
|}
 
 
=== Vector Functions ===
 
<!--############# VECTOR LINEAR #############-->
{|cellspacing="0" cellpadding="3" border="1" style="border: 1px solid #aaaaaa; margin: 1em 1em 1em 0pt; background-color: #ffffff; border-collapse: collapse" width="80%"
!style="color: #000000; background-color: #aaaaff;" height="20px"|
Vector Linear
|-
|
Linear interpolation of v0 and v1 with fraction t.
<lsl>
vector vLin(vector v0, vector v1,float t){
    return v0*(1-t) + v1*t;}
</lsl>
 
{|cellspacing="0" cellpadding="3" border="1" style="border: 1px solid #aaaaaa; margin: 1em 1em 1em 0pt; background-color: #ffffff; border-collapse: collapse" width="80%"
|
{|cellspacing="0" cellpadding="6" border="1" style="border: 1px solid #aaaaaa; margin: 1em 1em 1em 0pt; background-color: #e0e0ff; border-collapse: collapse"
!style="background-color: #d0d0ee" | Input
!style="background-color: #d0d0ee" | Description
|-
| vector v0
| Start, 0.0
|-
| vector v1
| End, 1.0
|-
| float t
| Fraction of interpolation
|-
!style="background-color: #d0d0ee" | Output
!style="background-color: #d0d0ee" | Description
|-
| return vector vLin
| Returns linear interpolation of two vectors
|}
| Graph goes here, k.
|}
<div style="float:right;font-size: 80%;">
By Nexii Malthus</div>
|}
 
<!--############# VECTOR COSINE #############-->
{|cellspacing="0" cellpadding="3" border="1" style="border: 1px solid #aaaaaa; margin: 1em 1em 1em 0pt; background-color: #ffffff; border-collapse: collapse" width="80%"
!style="color: #000000; background-color: #aaaaff;" height="20px"|
Vector Cosine
|-
|
Cosine interpolation of v0 and v1 with fraction t.
<lsl>
vector vCos(vector v0,vector v1,float t){
    float F = (1 - llCos(t*PI))/2;
    return v0*(1-F)+v1*F;}
</lsl>
 
{|cellspacing="0" cellpadding="3" border="1" style="border: 1px solid #aaaaaa; margin: 1em 1em 1em 0pt; background-color: #ffffff; border-collapse: collapse" width="80%"
|
{|cellspacing="0" cellpadding="6" border="1" style="border: 1px solid #aaaaaa; margin: 1em 1em 1em 0pt; background-color: #e0e0ff; border-collapse: collapse"
!style="background-color: #d0d0ee" | Input
!style="background-color: #d0d0ee" | Description
|-
| vector v0
| Start, 0.0
|-
| vector v1
| End, 1.0
|-
| float t
| Fraction of interpolation
|-
!style="background-color: #d0d0ee" | Output
!style="background-color: #d0d0ee" | Description
|-
| return vector vCos
| Returns cosine interpolation of two vectors
|}
| Graph goes here, k.
|}
<div style="float:right;font-size: 80%;">
By Nexii Malthus</div>
|}
 
<!--############# VECTOR CUBIC #############-->
{|cellspacing="0" cellpadding="3" border="1" style="border: 1px solid #aaaaaa; margin: 1em 1em 1em 0pt; background-color: #ffffff; border-collapse: collapse" width="80%"
!style="color: #000000; background-color: #aaaaff;" height="20px"|
Vector Cubic
|-
|
Cubic interpolation of v0, v1, v2 and v3 with fraction t.
<lsl>
vector vCub(vector v0,vector v1,vector v2,vector v3,float t){
    vector P = (v3-v2)-(v0-v1);vector Q = (v0-v1)-P;vector R = v2-v0;vector S = v1;
    return P*llPow(t,3) + Q*llPow(t,2) + R*t + S;}
</lsl>
 
{|cellspacing="0" cellpadding="3" border="1" style="border: 1px solid #aaaaaa; margin: 1em 1em 1em 0pt; background-color: #ffffff; border-collapse: collapse" width="80%"
|
{|cellspacing="0" cellpadding="6" border="1" style="border: 1px solid #aaaaaa; margin: 1em 1em 1em 0pt; background-color: #e0e0ff; border-collapse: collapse"
!style="background-color: #d0d0ee" | Input
!style="background-color: #d0d0ee" | Description
|-
| vector v0
| Modifier, 0.33~
|-
| vector v1
| Start, 0.0
|-
| vector v2
| End, 1.0
|-
| vector v3
| Modifier, 0.66~
|-
| float t
| Fraction of interpolation
|-
!style="background-color: #d0d0ee" | Output
!style="background-color: #d0d0ee" | Description
|-
| return vector vCub
| Returns cubic interpolation of four vectors
|}
| Graph goes here, k.
|}
<div style="float:right;font-size: 80%;">
By Nexii Malthus</div>
|}
 
<!--############# VECTOR HERMITE #############-->
{|cellspacing="0" cellpadding="3" border="1" style="border: 1px solid #aaaaaa; margin: 1em 1em 1em 0pt; background-color: #ffffff; border-collapse: collapse" width="80%"
!style="color: #000000; background-color: #aaaaff;" height="20px"|
Vector Hermite
|-
|
Hermite interpolation of v0, v1, v2 and v3 with fraction t, tension and bias.
<lsl>
vector vHem(vector v0,vector v1,vector v2,vector v3,float t,float tens,float bias){
    float t2 = t*t;float t3 = t2*t;
    vector a0 =  (v1-v0)*(1+bias)*(1-tens)/2;
          a0 += (v2-v1)*(1-bias)*(1-tens)/2;
    vector a1 =  (v2-v1)*(1+bias)*(1-tens)/2;
          a1 += (v3-v2)*(1-bias)*(1-tens)/2;
    float b0 =  2*t3 - 3*t2 + 1;
    float b1 =    t3 - 2*t2 + t;
    float b2 =    t3 -  t2;
    float b3 = -2*t3 + 3*t2;
    return (  b0  *  v1+b1  *  a0+b2  *  a1+b3  *  v2  );}
</lsl>
 
{|cellspacing="0" cellpadding="3" border="1" style="border: 1px solid #aaaaaa; margin: 1em 1em 1em 0pt; background-color: #ffffff; border-collapse: collapse" width="80%"
|
{|cellspacing="0" cellpadding="6" border="1" style="border: 1px solid #aaaaaa; margin: 1em 1em 1em 0pt; background-color: #e0e0ff; border-collapse: collapse"
!style="background-color: #d0d0ee" | Input
!style="background-color: #d0d0ee" | Description
|-
| vector v0
| Modifier, 0.33~
|-
| vector v1
| Start, 0.0
|-
| vector v2
| End, 1.0
|-
| vector v3
| Modifier, 0.66~
|-
| float t
| Fraction of interpolation
|-
| float tens
| Tension of interpolation
|-
| float bias
| Bias of interpolation
|-
!style="background-color: #d0d0ee" | Output
!style="background-color: #d0d0ee" | Description
|-
| return vector vHem
| Returns hermite interpolation of four vectors with tension and bias
|}
| Graph goes here, k.
|}
<div style="float:right;font-size: 80%;">
By Nexii Malthus</div>
|}
 
=== Rotation Functions ===
 
<!--############# ROTATION LINEAR #############-->
{|cellspacing="0" cellpadding="3" border="1" style="border: 1px solid #aaaaaa; margin: 1em 1em 1em 0pt; background-color: #ffffff; border-collapse: collapse" width="80%"
!style="color: #000000; background-color: #aaaaff;" height="20px"|
Rotation Linear
|-
|
Spherical Linear interpolation of r0 and r1 with fraction t.
Also known as '''SLERP'''
<lsl>
rotation rLin(rotation r0,rotation r1,float t){
    // Spherical-Linear Interpolation
    float ang = llAngleBetween(r0, r1);
    if( ang > PI) ang -= TWO_PI;
    return r0 * llAxisAngle2Rot( llRot2Axis(r1/r0)*r0, ang*t);}
</lsl>
 
{|cellspacing="0" cellpadding="3" border="1" style="border: 1px solid #aaaaaa; margin: 1em 1em 1em 0pt; background-color: #ffffff; border-collapse: collapse" width="80%"
|
{|cellspacing="0" cellpadding="6" border="1" style="border: 1px solid #aaaaaa; margin: 1em 1em 1em 0pt; background-color: #e0e0ff; border-collapse: collapse"
!style="background-color: #d0d0ee" | Input
!style="background-color: #d0d0ee" | Description
|-
| rotation r0
| Start, 0.0
|-
| rotation r1
| End, 1.0
|-
| float t
| Fraction of interpolation
|-
!style="background-color: #d0d0ee" | Output
!style="background-color: #d0d0ee" | Description
|-
| return rotation rLin
| Returns spherical linear interpolation of two rotations
|}
| Graph goes here, k.
|}
<div style="float:right;font-size: 80%;">
By Nexii Malthus</div>
|}
 
<!--############# ROTATION COSINE #############-->
{|cellspacing="0" cellpadding="3" border="1" style="border: 1px solid #aaaaaa; margin: 1em 1em 1em 0pt; background-color: #ffffff; border-collapse: collapse" width="80%"
!style="color: #000000; background-color: #aaaaff;" height="20px"|
Rotation Cosine
|-
|
Spherical Cosine interpolation of r0 and r1 with fraction t.
I liken to call it as '''SCORP'''
<lsl>
rotation rCos(rotation r0,rotation r1,float t){
    // Spherical-Cosine Interpolation
    float f = (1 - llCos(t*PI))/2;
    float ang = llAngleBetween(r0, r1);
    if( ang > PI) ang -= TWO_PI;
    return r0 * llAxisAngle2Rot( llRot2Axis(r1/r0)*r0, ang*f);}
</lsl>
 
{|cellspacing="0" cellpadding="3" border="1" style="border: 1px solid #aaaaaa; margin: 1em 1em 1em 0pt; background-color: #ffffff; border-collapse: collapse" width="80%"
|
{|cellspacing="0" cellpadding="6" border="1" style="border: 1px solid #aaaaaa; margin: 1em 1em 1em 0pt; background-color: #e0e0ff; border-collapse: collapse"
!style="background-color: #d0d0ee" | Input
!style="background-color: #d0d0ee" | Description
|-
| rotation r0
| Start, 0.0
|-
| rotation r1
| End, 1.0
|-
| float t
| Fraction of interpolation
|-
!style="background-color: #d0d0ee" | Output
!style="background-color: #d0d0ee" | Description
|-
| return rotation rCos
| Returns spherical cosine interpolation of two rotations
|}
| Graph goes here, k.
|}
<div style="float:right;font-size: 80%;">
By Nexii Malthus</div>
|}
 
<!--############# ROTATION CUBIC #############-->
{|cellspacing="0" cellpadding="3" border="1" style="border: 1px solid #aaaaaa; margin: 1em 1em 1em 0pt; background-color: #ffffff; border-collapse: collapse" width="80%"
!style="color: #000000; background-color: #aaaaff;" height="20px"|
Rotation Cubic
|-
|
Spherical Cubic interpolation of r0 and r1 with fraction t.
I liken to call it as '''SCURP'''
<lsl>
rotation rCub(rotation r0,rotation r1,rotation r2,rotation r3,float t){
    // Spherical-Cubic Interpolation
    // r0 = Start, r1 = End, r2 and r3 affect path of curve!
    return rLin( rLin(r0,r1,t), rLin(r2,r3,t), 2*t*(1-t) );}
</lsl>
 
{|cellspacing="0" cellpadding="3" border="1" style="border: 1px solid #aaaaaa; margin: 1em 1em 1em 0pt; background-color: #ffffff; border-collapse: collapse" width="80%"
|
{|cellspacing="0" cellpadding="6" border="1" style="border: 1px solid #aaaaaa; margin: 1em 1em 1em 0pt; background-color: #e0e0ff; border-collapse: collapse"
!style="background-color: #d0d0ee" | Input
!style="background-color: #d0d0ee" | Description
|-
| rotation r0
| Start, 0.0
|-
| rotation r1
| End, 1.0
|-
| rotation r2
| Modifier, 0.33~
|-
| rotation r3
| Modifier, 0.66~
|-
| float t
| Fraction of interpolation
|-
!style="background-color: #d0d0ee" | Output
!style="background-color: #d0d0ee" | Description
|-
| return rotation rCub
| Returns spherical cubic interpolation of four rotations
|-
!style="background-color: #eed0d0" colspan="2"| Requirement
|-
|style="background-color: #eed0d0" colspan="2"| function rotation rLin(rotation r0,rotation r1,float t)
|}
| Graph goes here, k.
|}
<div style="float:right;font-size: 80%;">
By Nexii Malthus</div>
|}
 
 
== Old non-documented Library ==
 
Changes/
1.0-1.1 - Added rotation types
1.1-1.2 - Added Hermite for float and vector
 
[[Interpolation/Examples|Example Script]]
 
<lsl>
//===================================================//
//              Interpolation Library 1.2          //
//              "May 12 2008", "6:16:20 GMT-0"      //
//  Copyright (C) 2008, Nexii Malthus (cc-by)        //
//    http://creativecommons.org/licenses/by/3.0/    //
//===================================================//
 
float fLin(float v0, float v1,float t){
    return v0*(1-t) + v1*t;}


float fCos(float v0,float v1,float t){
Linear Interpolation
    float F = (1 - llCos(t*PI))/2;
* [[Interpolation/Linear/Float|Float]]
    return v0*(1-F)+v1*F;}
* [[Interpolation/Linear/Vector|Vector]]
* [[Interpolation/Linear/Rotation|Rotation]]
* List of [[Interpolation/Linear/Vectors|Vectors]]


float fCub(float v0,float v1,float v2,float v3,float t){
    float P = (v3-v2)-(v0-v1);float Q = (v0-v1)-P;float R = v2-v0;float S = v1;
    return P*llPow(t,3) + Q*llPow(t,2) + R*t + S;}


float fHem(float v0,float v1,float v2,float v3,float t,float tens,float bias){
Cosine Interpolation
    float t2 = t*t;float t3 = t2*t;
* [[Interpolation/Cosine/Float|Float]]
    float a0 =  (v1-v0)*(1+bias)*(1-tens)/2;
* [[Interpolation/Cosine/Vector|Vector]]
          a0 += (v2-v1)*(1-bias)*(1-tens)/2;
* [[Interpolation/Cosine/Rotation|Rotation]]
    float a1 =  (v2-v1)*(1+bias)*(1-tens)/2;
          a1 += (v3-v2)*(1-bias)*(1-tens)/2;
    float b0 =  2*t3 - 3*t2 + 1;
    float b1 =    t3 - 2*t2 + t;
    float b2 =    t3 -  t2;
    float b3 = -2*t3 + 3*t2;
    return (  b0  *  v1+b1  *  a0+b2  *  a1+b3  *  v2  );}


vector vLin(vector v0, vector v1,float t){
    return v0*(1-t) + v1*t;}
Cubic Interpolation
* [[Interpolation/Cubic/Float|Float]]
* [[Interpolation/Cubic/Vector|Vector]]
* [[Interpolation/Cubic/Rotation|Rotation]]


vector vCos(vector v0,vector v1,float t){
    float F = (1 - llCos(t*PI))/2;
    return v0*(1-F)+v1*F;}


vector vCub(vector v0,vector v1,vector v2,vector v3,float t){
Catmull-Rom Cubic Interpolation
    vector P = (v3-v2)-(v0-v1);vector Q = (v0-v1)-P;vector R = v2-v0;vector S = v1;
* [[Interpolation/Catmull-Rom/Float|Float]]
    return P*llPow(t,3) + Q*llPow(t,2) + R*t + S;}


vector vHem(vector v0,vector v1,vector v2,vector v3,float t,float tens,float bias){
    float t2 = t*t;float t3 = t2*t;
    vector a0 =  (v1-v0)*(1+bias)*(1-tens)/2;
          a0 += (v2-v1)*(1-bias)*(1-tens)/2;
    vector a1 =  (v2-v1)*(1+bias)*(1-tens)/2;
          a1 += (v3-v2)*(1-bias)*(1-tens)/2;
    float b0 =  2*t3 - 3*t2 + 1;
    float b1 =    t3 - 2*t2 + t;
    float b2 =    t3 -  t2;
    float b3 = -2*t3 + 3*t2;
    return (  b0  *  v1+b1  *  a0+b2  *  a1+b3  *  v2  );}


rotation rLin(rotation r0,rotation r1,float t){
Hermite Interpolation
    // Spherical-Linear Interpolation
* [[Interpolation/Hermite/Float|Float]]
    float ang = llAngleBetween(r0, r1);
* [[Interpolation/Hermite/Vector|Vector]]
    if( ang > PI) ang -= TWO_PI;
    return r0 * llAxisAngle2Rot( llRot2Axis(r1/r0)*r0, ang*t);}


rotation rCos(rotation r0,rotation r1,float t){
Spline Interpolation
    // Spherical-Cosine Interpolation
* List of [[Interpolation/Spline/Vectors|Vectors]]
    float f = (1 - llCos(t*PI))/2;
    float ang = llAngleBetween(r0, r1);
    if( ang > PI) ang -= TWO_PI;
    return r0 * llAxisAngle2Rot( llRot2Axis(r1/r0)*r0, ang*f);}


rotation rCub(rotation r0,rotation r1,rotation r2,rotation r3,float t){
Rescale
    // Spherical-Cubic Interpolation
* [[Interpolation/Rescale/Float|Float]]
    // r0 = Start, r1 = End, r2 and r3 affect path of curve!
* [[Interpolation/Rescale/FloatFixed|Float Fixed]]
    return rLin( rLin(r0,r1,t), rLin(r2,r3,t), 2*t*(1-t) );}


default{state_entry(){}}


</lsl>
Target
* [[Interpolation/Target/Float|Float]]

Latest revision as of 12:10, 16 September 2011

Interpolation is a way of constructing new data points within a range of known data points.

The range of applications is varied, but here in SL it can most directly be used for animating and/or moving prims or linksets via any attribute you can creatively make use of.

Attributes:

  • Prim/Object Position
  • Prim/Object Rotation
  • Texture Scale/Offsets
  • or you can just simply interpolate internal values

Potential applications:

  • Movement
  • Animation
  • User Interfaces
  • Graphics
  • Games

There are many different types of interpolation, which may exhibit different preferred or controllable behaviour.


Interpolation Library

Linear Interpolation


Cosine Interpolation


Cubic Interpolation


Catmull-Rom Cubic Interpolation


Hermite Interpolation

Spline Interpolation

Rescale


Target