0

数値範囲 0 ~ 1 に基づいて 3 色の間で lerp する必要があります。これはどのように行われますか? 私はjavascriptでコーディングしています。私の考えですが、実装方法がわかりません: 条件と 0.0 - 0.5、0.5 - 1.0 の間のクランプ?

これは私が今持っているものです:

if(s <= 0.5){
    renderer.material.color = Color.Lerp(colorEnd,colorStart, s);    
}
else if(s>0.5){  
    renderer.material.color = Color.Lerp(colorEnd,colorStart, s); 
}
4

3 に答える 3

1

ここから始めるのは、時間の経過とともに単一の値を Lerp する Tween 関数です。色成分の各値で使用できます。ただし、より効率的な方法があると確信しています。

public static float TweenValue (float from,float to,float time)
{
    if (from != to) 
    {
        if (Mathf.Abs(to-from) > 1.0)
        {
            from = Mathf.Lerp(from, to, time*Time.deltaTime);
        }
        else 
        {
            from = to;
        }       
    }

    return from;
}
于 2013-10-21T21:02:18.753 に答える
0

実際にあなたがしていることもうまくいきます。各 color.Lerp に 0 と 1 の間の値を利用させたいので、コード内の変数 's' を単純に拡大する必要があります。

したがって、Gradient が行うことの単純なバージョンを作成する場合、それはあなたが持っているもののように見えますが、's' 値にスケールの再マッピングを適用します。

主に、各Ifステートメントで(または理想的にはIfステートメントからの関数呼び出しとして)、「s」を0と1の間の値に再スケーリングします。

したがって、<= 0.5(最初の If ステートメントのように) 's' が想定されている場合、's' は 0 から 0.5 の間であることがわかります。単純に 2 を掛けると 0 と 1 の間の値が得られ、color.Lerp 関数は適切に機能します。

if(s <= 0.5){
    s *= 2f;
    renderer.material.color = Color.Lerp(colorEnd,colorStart, s);    
}

しかし、あなたは後者のためにもう少しMathyである必要があります.

「s」が 0.5 から 1 の間になる場合は、スケールを手動で再マッピングする必要があります。

数式は次のとおりです。
Y = (((X - x1) * (y2 - y1)) / (x2 - x1)) + y1

したがって、「s」は次のようになります。
newS = (((s - sMin) * (newMax - newMn)) / (sMax - sMin)) + newMin;

スクリプトは次のようになります。

//declare variables somewhere before If statements:

color color1, color2, color3;

float newS, sMin, sMax, newMin = 0, newMax = 1;


//your If statements. you can always add more if you want more color ranges.


if(s >= 0 && <= 0.5){
    sMin = 0;
    sMax = 0.5;
    newS =  (((s - sMin) * (newMax - newMn)) / (sMax - sMin)) + newMin;
    renderer.material.color = Color.Lerp(color2,color1, newS);    
}

else if(s>0.5 && s<=1){
    sMin = 0.5;
    sMax = 1;
    newS =  (((s - sMin) * (newMax - newMn)) / (sMax - sMin)) + newMin;
    renderer.material.color = Color.Lerp(color3,color2, newS); 
}
于 2015-06-22T01:56:12.043 に答える