1

我想渲染从一侧到另一侧的颜色渐变。如图所示,颜色渐变从最小边界框开始到最大边界框。代码如下。

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

在此处输入图像描述

这里的问题是,颜色渐变不遵循任何方向(例如从下到上:下侧有红色和蓝紫色两种颜色)。但我需要应用从 -x 到 x 或 -y 到 y 或 -z 到 z 的渐变,这意味着如果红色从 -y 开始,那么只有红色覆盖 -y 侧区域,然后通过将渐变从 -y 移动到 y , 以红后蓝后绿后黄等递增颜色。下侧不应有红色和蓝紫色,必须只有红色然后向上移动到蓝色然后绿色等。

我怎样才能做到这一点 ?等式是什么?

4

1 回答 1

1

您的解决方案非常简单,但非常有限。VERTICES[i]如果您希望渐变仅应用于一个轴,则应仅使用 VERTICES 结构的一个组件(我假设保持当前顶点的位置)。将您的代码分成两部分:

梯度函数

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));

着色器在普通的 GLSL 中,所以请原谅我对 ES 的无知。

于 2012-09-26T10:37:01.480 回答