1. ## Apply circular alpha state to quad

Hi All, my first post, and, well, I'm a complete noob to shaders. I'm learning how to use Ardor3D (java scenegraph), and am making a terrain engine for it. Currently I'm playing around with a skydome, and have placed a quad above the ground for clouds texturing. I found a cool cloud shader on the net, and have successfully applied it to my cloud quad. Now, for a nicer view, I need to alpha blend the quad in a circular fashion, so I can adjust things so where the quad intersects the skydome, I don't just get a harsh cutoff point of cloud texturing v skydome background.

I found a good tutorial online, that used the equation for a circle to apply a blend via the mix function from the texture colour to a given colour. So I thought I'd use this to adjust my quad shader to give me what I want. Anyway, it doesn't work and my lack of understanding to things doesn't allow me to troubleshoot yet, so I'm hoping someone could please have a look at it and see what I'm doing wrong.

Code :
```uniform vec3 eyePosition;
uniform vec3 sunDirection;
uniform float scale;

varying vec2  oUv;
varying float oGlow;

void main(void)
{
vec4 position = gl_Vertex;

// get vertex-position
gl_Position = gl_ModelViewProjectionMatrix * position;

// get vertex-normal
vec3 normal = gl_Normal;

oGlow = pow (clamp (dot ((position.xyz - eyePosition), sunDirection), 0.0, 1.0), 7.0);

// UV-coordiantes
oUv = vec2 (gl_MultiTexCoord0.xy) * scale;

gl_TexCoord[0] = gl_MultiTexCoord0;

}```

Code :
```uniform sampler2D cloud;
uniform sampler2D detail;
uniform vec3  sunDirection;
uniform float time;
uniform vec4  fogColor;
uniform vec4  cloudColor;
uniform float density;
uniform float cloudInvScale;
uniform float detailInvScale;
uniform vec2 cloudSpeed;
uniform vec2 detailSpeed;
uniform vec2 textureSize;
uniform float tolerance;

varying vec2  oUv;
varying float oGlow;

void main(void)
{

vec2 cloudOffset = cloudSpeed * time;
vec2 detailOffset = detailSpeed * time;
vec2 circleRegionCoords = fract(gl_TexCoord[0].st);

float a1 = texture2D (cloud, (oUv + cloudOffset) * cloudInvScale).b;
float a2 = texture2D (detail,(oUv + detailOffset) * detailInvScale).b;
//float a3 = texture2D (mask, gl_TexCoord[0].st).a;

vec3 p_sunDirection = normalize (sunDirection) * -0.01;
p_sunDirection.x = p_sunDirection.x;
p_sunDirection.y = -p_sunDirection.z;
p_sunDirection.z = 0.0;

vec4 p_fogColor = fogColor;

vec4 oCol = cloudColor * (p_fogColor *2.0);
oCol.a *= clamp (a1 + a2 - 1.0, 0.0, 1.0);
oCol.rgb *= 1 - oCol.a * density;

vec3  absorption = vec3(0.0);
absorption += clamp (
texture2D (cloud,  (oUv + sunDirection.xy * 0.2 + cloudOffset) * cloudInvScale).rgb +
texture2D (detail, (oUv + sunDirection.xy * 0.2 + detailOffset) * detailInvScale).rgb - 1.0, 0.0, 1.0);
absorption += clamp (
texture2D (cloud,  (oUv + sunDirection.xy * 0.4 + cloudOffset) * cloudInvScale).rgb +
texture2D (detail, (oUv + sunDirection.xy * 0.4 + detailOffset) * detailInvScale).rgb - 1.0, 0.0, 1.0);
absorption += clamp (
texture2D (cloud,  (oUv + sunDirection.xy * 0.6 + cloudOffset) * cloudInvScale).rgb +
texture2D (detail, (oUv + sunDirection.xy * 0.6 + detailOffset) * detailInvScale).rgb - 1.0, 0.0, 1.0);
absorption += clamp (
texture2D (cloud,  (oUv + sunDirection.xy * 0.8 + cloudOffset) * cloudInvScale).rgb +
texture2D (detail, (oUv + sunDirection.xy * 0.8 + detailOffset) * detailInvScale).rgb - 1.0, 0.0, 1.0);
absorption += clamp (
texture2D (cloud,  (oUv + sunDirection.xy * 1.0 + cloudOffset) * cloudInvScale).rgb +
texture2D (detail, (oUv + sunDirection.xy * 1.0 + detailOffset) * detailInvScale).rgb - 1.0, 0.0, 1.0);

oCol.rgb *= 1.0 - clamp (absorption * 0.2, 0.0, 1.0) * density;

oCol.rgb *= oGlow;

//blend between fragments in the circle and out of the circle defining our "pixel region"
//Equation of a circle: (x - h)^2 + (y - k)^2 = r^2
vec2 powers = pow(abs(circleRegionCoords - (textureSize/2)),vec2(2.0));

}```

If someone could point me in the right direction, or maybe even test it I'd be really grateful, I intend to learn more about this stuff, it seems the way forward for fast effects.