77

« **on:** March 11, 2014, 01:27:04 am »
Is it feasible to use shaders such as this for creating glassy effects? Or can JPCT only contain certain uniforms names?

`// from the Orange Book 2nd edition`

const float Eta = 0.66;

const float FresnelPower = 0.5;

const float F = ((1.0-Eta)*(1.0-Eta))/((1.0+Eta)*(1.0+Eta));

varying vec3 Reflect;

varying vec3 Refract;

uniform float Ratio;

void main()

{

vec4 ecPosition = gl_ModelViewMatrix * gl_Vertex;

vec3 ecPosition3 = ecPosition.xyz / ecPosition.w;

vec3 i = normalize(ecPosition3);

vec3 n = normalize(gl_NormalMatrix * gl_Normal);

Ratio = F + (1.0 - F) * pow((1.0 - dot(-i, n)), FresnelPower);

Refract = refract(i, n, Eta);

Refract = vec3(gl_TextureMatrix[0] * vec4 (Refract, 1.0));

Reflect = reflect(i, n);

Reflect = vec3(gl_TextureMatrix[0] * vec4 (Reflect, 1.0));

gl_Position = ftransform();

}

Fragment shader

`// from the Orange Book 2nd edition`

varying vec3 Reflect;

varying vec3 Refract;

uniform float Ratio;

uniform sampler2D MyTex;

void main (void)

{

vec3 refractColor = vec3(texture2D( MyTex, Refract));

vec3 reflectColor = vec3(texture2D( MyTex, Reflect));

vec3 color = mix(refractColor, reflectColor, Ratio);

gl_FragColor = vec4(color, 1.0);

}