我画了一组四边形。对于每个四边形,我在其顶点都有一个定义的颜色。
例如。现在我的四边形集看起来像:
我以相当原始的方式实现了这样的结果,只需将其作为四边形每个顶点的属性颜色传递到顶点着色器即可。
我的着色器非常简单:
顶点着色器
#version 150 core
in vec3 in_Position;
in vec3 in_Color;
out vec3 pass_Color;
uniform mat4 projectionMatrix;
uniform mat4 viewMatrix;
uniform mat4 modelMatrix;
void main(void) {
gl_Position = projectionMatrix * viewMatrix * modelMatrix * vec4(in_Position, 1.0);
pass_Color = in_Color;
}
片段着色器
#version 150 core
in vec3 pass_Color;
out vec4 out_Color;
void main(void) {
out_Color = vec4(pass_Color, 1.0);
}
现在我的目标是获得从顶点到顶点的颜色非连续分布。也可称为“等级分布”。
我的四边形集应该如下所示:
我怎样才能达到这样的结果?
EDIT:
With vesan
and Nico Schertler
盘子看起来像这样。 (不可接受的变体)
我的猜测是您使用的色调颜色和顶点插值会出现问题(例如跳过一些波段)。相反,可能会传入单个通道值并计算片段着色器中的色调和离散级别(如@vesan 所做的那样)。我自己使用这些功能...
vec3 hueToRGB(float h)
{
h = fract(h) * 6.0;
vec3 rgb;
rgb.r = clamp(abs(3.0 - h)-1.0, 0.0, 1.0);
rgb.g = clamp(2.0 - abs(2.0 - h), 0.0, 1.0);
rgb.b = clamp(2.0 - abs(4.0 - h), 0.0, 1.0);
return rgb;
}
vec3 heat(float x)
{
return hueToRGB(2.0/3.0-(2.0/3.0)*clamp(x,0.0,1.0));
}
and then
float discrete = floor(pass_Value * steps + 0.5) / steps; //0.5 to round
out_Color = vec4(heat(discrete), 1.0);
where in float in_Value
是0到1。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)