float4x4 mvp : ModelViewProjection; float4x4 mv : ModelView; float4x4 mvit : ModelViewIT; float3 refFactor = float3(1.1,1.3,1.5); float fresOffset = 0.1; float fresScale = 0.3; float fresPower = 0.2; samplerCUBE skybox : SKYBOX; string jointGeo = "cylinder.obj"; sampler2D normal = sampler_state { generateMipMap = true; minFilter = Linear; magFilter = Linear; wrapS = Repeat; wrapT = Repeat; }; float3 expand(float3 v) { return (v-0.5)*2; } float4 vertex(uniform float4x4 modelViewProj, uniform float4x4 modelView, uniform float4x4 modelViewIT, float4 P : POSITION, float4 N : NORMAL, float2 uvIn : TEXCOORD0, in float4 Cin : COLOR0, out float3 CC : COLOR0, out float2 uv : TEXCOORD0, out float3 Pcam : TEXCOORD1, out float3 Ncam : TEXCOORD2) : POSITION { CC.xyz = normalize(N.xyz); uv = uvIn; Pcam = mul(modelView, P).xyz; Ncam = mul(modelViewIT, N).xyz; return mul(modelViewProj, P); } float4 light( uniform float4 col, in float3 texcoord, float3 Pcam : TEXCOORD1, float3 Ncam : TEXCOORD2) : COLOR { float3 tan = normalize(col.xyz); float3 wo = normalize(-Pcam); float3 result;// = ambient; float3 Nn = normalize(Ncam); float3 Nn2 = Nn; float3 biNorm = normalize(cross(tan,Nn)); float3x3 toTexture = transpose(float3x3(tan,biNorm,Nn)); Nn = mul(toTexture,expand(tex2D(normal,texcoord))); Nn = normalize(Nn+2*Nn2); float3 r, tred, tblue, tgreen; r = reflect(Pcam,Nn); tred = refract(Pcam,Nn,refFactor.r); tgreen = refract(Pcam,Nn,refFactor.g); tblue = refract(Pcam,Nn,refFactor.b); r = texCUBE(skybox,r.rgb).rgb; col.r = texCUBE(skybox,tred).r; col.g = texCUBE(skybox,tred).g; col.b = texCUBE(skybox,tred).b; float fres = fresOffset + fresScale * pow(1 + dot(normalize(Pcam), Nn), fresPower ); //col.rgb = r.rgb; return float4(lerp(col.rgb, r.rgb, fres).rgb,1); //return col; } technique red { pass p0 { VertexProgram = compile arbvp1 vertex(mvp, mv, mvit); FragmentProgram = compile arbfp1 light(float4(1.0, 0.0 ,0.0 ,1.0)); } } technique red { pass p0 { VertexProgram = compile arbvp1 vertex(mvp, mv, mvit); FragmentProgram = compile arbfp1 light(float4(0.0, 1.0 ,0.0 ,1.0)); } }