#version 150 core in vec3 vertexPosition; in vec3 vertexNormal; in vec3 pos; out vec3 position; out vec3 normal; out vec3 kd; uniform mat4 modelView; uniform mat3 modelViewNormal; uniform mat4 mvp; // Calculate RGB triplet from HSV vec3 hsvToRGB( float h, float s, float v ) { if ( s <= 0.0 ) return vec3( v ); h = h * 6.0; float c = v * s; float x = ( 1.0 - abs( ( mod( h, 2 ) - 1 ) ) ) * c; float m = v - c; float r = 0.0; float g = 0.0; float b = 0.0; if ( h < 1.0 ) { r = c; g = x; b = 0.0;} else if ( h < 2.0 ) { r = x; g = c; b = 0.0; } else if ( h < 3.0 ) { r = 0.0; g = c; b = x; } else if ( h < 4.0 ) { r = 0.0; g = x; b = c; } else if ( h < 5.0 ) { r = x; g = 0.0; b = c; } else { r = c; g = 0.0; b = x; } return vec3( r + m, g + m, b + m ); } void main() { normal = normalize( modelViewNormal * vertexNormal ); vec3 offsetPos = vertexPosition + pos; position = vec3(modelView * vec4(offsetPos, 1.0)); float hue = fract( pos.x / 10.0 ); float saturation = fract( pos.z / 20.0 ); kd = hsvToRGB( hue, saturation, 1.0 ); gl_Position = mvp * vec4(offsetPos, 1.0); }