Procedural Chess Texture (Smooth)
Ein procedurales Schachmuster mit smoothstep() Funktion.
Screenshot:
Vertex Shader:
uniform vec3 LightPosition;
vec3 Normal;
varying float LightIntensity;
varying vec3 OBposition;
void main(void) {
//light
Normal = normalize(gl_NormalMatrix * gl_Normal);
vec4 pos = gl_ModelViewMatrix * gl_Vertex;
LightIntensity = max(dot(normalize(LightPosition - pos.xyz), Normal), 0.0);
//end light
OBposition = gl_Vertex.xyz;
gl_Position = ftransform();
}
Fragment Shader:
varying float LightIntensity;
varying vec3 OBposition;
uniform vec3 darkColor;
uniform vec3 brightColor;
uniform float chessSize;
uniform float smoothFactor;
void main(){
float halfChess = chessSize / 2.0;
vec3 position = mod(OBposition,chessSize);
position = abs(position-halfChess)*2.0;
vec3 useColor = smoothstep(halfChess-smoothFactor,
halfChess+smoothFactor,position);
useColor -= smoothstep(halfChess-smoothFactor,
halfChess+smoothFactor,chessSize-position);
//float mixVal = clamp(useColor.x * useColor.y * useColor.z,0.0,1.0);
float mixVal = max(useColor.x * useColor.y * useColor.z,0.0);
vec3 color = mix(darkColor, brightColor, mixVal);
gl_FragColor = vec4(color * LightIntensity, 1.0);
}