【发布时间】:2014-08-13 00:16:13
【问题描述】:
我正在寻找如何使用片段着色器获得平滑渐变的方法。我有带有11 颜色和value 的调色板,用于定义颜色(它的范围从0.0 到1.0)。
我正在尝试使用这样的fragment shader 获得平滑的颜色翻译:
#version 150 core
in float value;
uniform vec3 colors[11];
out vec4 out_Color;
void main(void)
{
int index = int(round(value * 10));
int floorIndex = 0;
if (index != 0) floorIndex = index - 1;
out_Color = vec4(mix(colors[floorIndex], colors[index], value), 1.0f);
}
但是使用这种方法我只能得到阶梯式颜色分布。
我想要的结果如下:
我知道如何通过仅将颜色作为属性传递的路径着色器来获得它,但事实并非如此。我将通过传递给fragment shader 的单个浮点值获得如此平滑的分布。
【问题讨论】:
-
一个建议:将
if (index != 0) floorIndex = index - 1;改为floorIndex = max(index-1, 0),避免分支,提高性能。 -
@三十二上校:真的,很好的建议。
标签: opengl shader fragment-shader