Unittest Geometric functions TODO : add tests for faceforward, reflect and refract
// dot vec2 v2 = vec2( 1.0f, 3.0f ); assert( dot( v2, vec2( 2.0f, 2.0f )) == 8.0f ); vec3 v3 = vec3( 1.0f, 3.0f, 5.0f ); assert( dot( v3, vec3( 2.0f, 2.0f, 2.0f )) == 18.0f ); vec4 v4 = vec4( 1.0f, 3.0f, 5.0f, 7.0f ); assert( dot( v4, vec4( 2.0f, 2.0f, 2.0f, 2.0f )) == 32.0f ); vec3 v3_1 = vec3( 1.0f, 2.0f, -3.0f ); vec3 v3_2 = vec3( 1.0f, 3.0f, 2.0f ); assert( dot( v3_1, v3_2 ) == 1.0f ); assert( dot( v3_1, v3_2 ) == dot( v3_2, v3_1 )); assert( v3_1 * v3_2 == v3_1 * v3_2 ); assert( v3_1 * v3_2 == vec3( 1.0f, 6.0f, -6.0f )); // cross assert( cross( v3_1, v3_2 ).data == [ 13.0f, -5.0f, 1.0f ] ); assert( cross( v3_2, v3_1 ).data == [ -13.0f, 5.0f, -1.0f ] ); // normalize assert( normalize( vec2( 1 )) == [ 1.0f / sqrt( 2.0f ), 1.0f / sqrt( 2.0f ) ] ); assert( vec3( 1 ).normalize == [ 1.0f / sqrt( 3.0f ), 1.0f / sqrt( 3.0f ), 1.0f / sqrt( 3.0f ) ] ); assert( normalize( vec4( 1 )) == [ 0.5, 0.5, 0.5, 0.5 ] ); // length assert( length( v2 ) == sqrt( 10.0f )); assert( v3.length == sqrt( 35.0f )); assert( length( v4 ) == sqrt( 84.0f )); // distance assert( distance( vec2( 0.0f, 0.0f ), vec2( 0.0f, 10.0f )) == 10.0 );
For the incident vector I and surface normal N, and the ratio of indices of refraction eta, return the refraction vector The input parameters for the incident vector I and the surface normal N must already be normalized