01.08.2013 Views

Ray Tracing op GPU en CPU - EDM - UHasselt

Ray Tracing op GPU en CPU - EDM - UHasselt

Ray Tracing op GPU en CPU - EDM - UHasselt

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!