我想渲染从一侧到另一侧的颜色渐变。在图中您可以看到,颜色渐变从最小边界框到最大边界框。代码如下。
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 ,先增加红色,然后蓝色,然后绿色,然后黄色等。向下不应有红色和蓝紫色,必须只有红色,然后向上移动到蓝色,然后绿色,依此类推。
我该怎么做?等式是什么?
最佳答案
您的解决方案非常简单,但非常有限。如果您希望渐变仅应用于一个轴,则应该只使用 VERTICES 结构的一个组件(我假设 VERTICES[i] 保存当前顶点的位置)。将您的代码分为两部分:
梯度函数
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 的无知。
关于opengl - 如何在opengl中渲染从一侧开始到另一侧的颜色渐变?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12596652/