#version 450 core in vec4 vPosID; in vec4 vCol; in vec4 vCenterSize; in vec4 vControls; layout (location=0) out vec4 fCol; layout (location=1) out vec4 fPos; layout (location=2) out vec4 fNorm; void main() { // there are quite a few intricate controls concerning the normals // we want normals to be bigger towards the center, so that when two clouds // are blended central normals predominate // similarly, we want normals to be bigger the further up the cloud is // finally, we want normals to allow for shadows at the edge of a cloud // when a light is direcly above the cloud float d = dot(vControls,vControls); if (d > 1) {discard;} fCol = vec4(vCol.xyz,vCol.w*(1-d)); //fCol = vCol; //float rad = vCenterSize.w*0.5; float rad = vCenterSize.w; float h = (1-d) * rad; fPos = vec4(vPosID.xy, vPosID.z + h, vCol.w*(1-d)); //vec3 vCen = //vec3 fn1 = fPos.z*normalize(vec3(vCenterSize.xyz - fPos.xyz)); vec3 fn1 = fPos.z*normalize(vec3(vCenterSize.xy - vPosID.xy,0)); //fNorm = vec4(fn1,fPos.w); fNorm = vec4(vControls.xy, 0.1 ,fPos.w); }