1

ある側から別の側に始まる色のグラデーションをレンダリングしたい。図でわかるように、色のグラデーションは最小境界ボックスから最大境界ボックスまで始まります。コードは以下です。

Point c = (VERTICES[i] - min) / (max - min);
p_COLOR[i].setRGB(c.red, c.green, c.blue);

ここに画像の説明を入力

ここでの問題は、色のグラデーションがどの方向にも続いていないことです (たとえば、下から上へ: 下側には赤と青みがかった紫の 2 色があります)。しかし、-x から x または -y から y または -z から z に始まるグラデーションを適用する必要があります。つまり、赤色が -y から始まる場合、赤色のみが -y 側の領域をカバーし、次にグラデーションを -y から y に移動します。 、青の後に赤、緑、黄色の順に色を増やします。下側に赤と青みがかった紫があってはなりません。赤だけが存在し、次に上に移動して青、緑などになります。

どうやってやるの ?方程式は何でしょうか?

4

1 に答える 1

1

あなたの解決策は非常に単純ですが、非常に限られています。VERTICES[i]グラデーションを1つの軸のみに適用する場合は、VERTICES構造体の1つのコンポーネントのみを使用する必要があります(現在の頂点の位置を保持していると思います)。コードを2つの部分に分割します。

勾配関数

vec3 Gradient (float param) 
{
    param = clamp(param, 0, 1);

    // we are treating these colors as HSL now:
    vec3 ColorA (0, 0.5, 0.5);
    vec3 ColorB (1, 0.5, 0.5);

    // so now we need to convert them to plain old RGB
    // note how the blending equation remains the same
    return HSL2RGB(param * ColorA + (1-param) * ColorB); // simple blending equation
}

ぬりえ機能

float c = ((VERTICES[i] - min) / (max - min)).x; // or y,z
p_COLOR[i].setRGB(Gradient(c));

シェーダーは通常のGLS​​Lにあるので、ESでの私の無知を許してください。

于 2012-09-26T10:37:01.480 に答える