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