- Timestamp:
- 11/09/06 17:04:55 (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
GTP/trunk/App/Demos/Illum/Ogre/Media/materials/programs/GameTools_Diffuse.hlsl
r1683 r1735 3 3 float4 readCubeMap(samplerCUBE cm, float3 coord) 4 4 { 5 float4 color = texCUBE ( cm, float3(coord.xy, -coord.z) );5 float4 color = texCUBElod( cm, float4(coord.xy, -coord.z, 1) ); 6 6 color.a = 1; 7 7 return color; … … 10 10 float readDistanceCubeMap(samplerCUBE dcm, float3 coord) 11 11 { 12 float dist = texCUBE (dcm, float3(coord.xy, - coord.z)).r;12 float dist = texCUBElod(dcm, float4(coord.xy, - coord.z, 1)).r; 13 13 if(dist == 0) dist = 1000000; ///sky 14 14 return dist; 15 15 } 16 16 17 // This function is called several times.18 float3 Hit( float3 x, float3 R, samplerCUBE mp )19 {20 float rl = readDistanceCubeMap( mp, R); // |r|21 22 float ppp = length( x ) / readDistanceCubeMap( mp, x); // |p|/|p|23 float dun = 0, pun = ppp, dov = 0, pov = 0;24 float dl = rl * ( 1 - ppp ); // eq. 225 float3 l = x + R * dl; // ray equation26 27 // iteration28 for( int i = 0; i < 2; i++ ) // 2 !!!!!!!!!!!!!!!!!!!!!!!29 {30 float llp = length( l ) / readDistanceCubeMap( mp, l); // |l|/|l|31 if ( llp < 0.999f ) // undershooting32 {33 dun = dl; pun = llp; // last undershooting34 dl += ( dov == 0 ) ? rl * ( 1 - llp ) : // eq. 235 ( dl - dov ) * ( 1 - llp ) / ( llp - pov ); // eq. 336 } else if ( llp > 1.001f ) // overshooting37 {38 dov = dl; pov = llp; // last overshooting39 dl += ( dl -dun ) * ( 1 - llp ) / ( llp - pun );// eq. 340 }41 l = x + R * dl; // ray equation42 }43 return l; // computed hit point44 }45 17 46 18 /////////////////////
Note: See TracChangeset
for help on using the changeset viewer.