|
|
(10 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
| |
| |}
| |
| | [[Image:Interp_Chart1.png|center]]
| |
| |}
| |
| <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
| |
| |}
| |
| | [[Image:Interp_Chart2.png|center]]
| |
| |}
| |
| <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
| |
| |}
| |
| | [[Image:Interp_Chart3.png|center]]
| |
| |}
| |
| <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>
| |
| |}
| |
| | |
| === Speed Controlled ===
| |
| | |
| <!--############# ROTATION COSINE AIM #############-->
| |
| {|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 Aim
| |
| |-
| |
| |
| |
| Spherical Cosine interpolation of r0 and r1 with speed regulation.
| |
| Does the entire animation loop to rotate between r0 to r1 with a specific speed, with the cosine interpolation it makes it appear to accelerate and deccelerate realistically.
| |
| <lsl>
| |
| rCosAim( rotation r0, rotation r1, float speed ){
| |
| float ang = llAngleBetween(r0, r1) * RAD_TO_DEG;
| |
| if( ang > PI) ang -= TWO_PI;
| |
| float x; float y = (ang/speed)/0.2;
| |
| for( x = 0.0; x < y; x += 1.0 )
| |
| llSetRot( rCos( r0, r1, x/y ) );
| |
| }
| |
| </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 speed
| |
| | Speed of animation
| |
| |-
| |
| !style="background-color: #d0d0ee" | Output
| |
| !style="background-color: #d0d0ee" | Description
| |
| |-
| |
| | return rotation rCos
| |
| | Creates a spherical cosine animation of two rotations with a specific speed
| |
| |-
| |
| !style="background-color: #eed0d0" colspan="2"| Requirement
| |
| |-
| |
| |style="background-color: #eed0d0" colspan="2"| function rotation rCos(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]] |