Ray Tracing op GPU en CPU - EDM - UHasselt
Ray Tracing op GPU en CPU - EDM - UHasselt
Ray Tracing op GPU en CPU - EDM - UHasselt
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
struct outputs {<br />
float4 h P o s i t i o n : POSITION ;<br />
float4 fresnelTerm : COLOR0;<br />
float4 r e f r a c t V e c : TEXCOORD0;<br />
float4 r e f l e c t V e c : TEXCOORD1;<br />
} ;<br />
// f r e s n e l approximation<br />
fixed f a s t f r e s n e l ( float3 I , float3 N, float3 f r e s n e l V a l u e s ) {<br />
fixed power = f r e s n e l V a l u e s . x ;<br />
fixed s c a l e = f r e s n e l V a l u e s . y ;<br />
fixed b i a s = f r e s n e l V a l u e s . z ;<br />
return b i a s + pow ( 1 . 0 − dot ( I , N) , power ) ∗ s c a l e ;<br />
}<br />
outputs main (<br />
inputs IN ,<br />
uniform float4x4 ModelViewProj ,<br />
uniform float4x4 ModelView ,<br />
uniform float4x4 ModelViewIT ,<br />
uniform float theta ) {<br />
outputs OUT;<br />
OUT. h P o s i t i o n = mul ( ModelViewProj , IN . P o s i t i o n ) ;<br />
// convert p o s i t i o n and normal i n t o a p p r o p r i a t e spaces<br />
float3 eyeToVert = mul ( ModelView , IN . P o s i t i o n ) . xyz ;<br />
eyeToVert = normalize ( eyeToVert ) ;<br />
float3 normal = mul ( ModelViewIT , IN . Normal ) . xyz ;<br />
normal = normalize ( normal ) ;<br />
OUT. r e f r a c t V e c . xyz = r e f r a c t ( eyeToVert , normal , theta ) ;<br />
OUT. r e f r a c t V e c .w = 1 ;<br />
OUT. r e f l e c t V e c . xyz = r e f l e c t ( eyeToVert , normal ) ;<br />
OUT. r e f l e c t V e c .w = 1 ;<br />
// c a l c u l a t e the f r e s n e l r e f l e c t i o n<br />
OUT. fresnelTerm = f a s t f r e s n e l (−eyeToVert , normal ,<br />
float3 ( 5 . 0 , 1 . 0 , 0 . 0 ) ) ;<br />
return OUT;<br />
}<br />
Codefragm<strong>en</strong>t 4.2: Cg vertex shader voor refractie<br />
float4 main ( in float3 r e f r a c t V e c : TEXCOORD0,<br />
in float3 r e f l e c t V e c : TEXCOORD1,<br />
in float3 fresnelTerm : COLOR0,<br />
uniform samplerCUBE <strong>en</strong>vironm<strong>en</strong>tMaps [ 2 ] ,<br />
uniform float e n a b l e R e f r a c t i o n ,<br />
uniform float e n a b l e F r e s n e l ) : COLOR {<br />
float3 r e f r a c t C o l o r = texCUBE( <strong>en</strong>vironm<strong>en</strong>tMaps [ 0 ] ,<br />
r e f r a c t V e c ) . rgb ;<br />
float3 r e f l e c t C o l o r = texCUBE( <strong>en</strong>vironm<strong>en</strong>tMaps [ 1 ] ,<br />
r e f l e c t V e c ) . rgb ;<br />
26