Slide 14
Slide 14 text
# define BOOST_TEST_MAIN
#include
#include
#include
using namespace glm;
vec3 diffuse(
vec3 surface_pos, vec3 light_pos, vec3 normal,
vec3 albedo, float metallicness, vec3 light_energy
) {
const vec3 relative_light_pos = light_pos - surface_pos;
const vec3 L = normalize( relative_light_pos );
const float light_distance2 = dot( relative_light_pos, relative_light_pos );
const float diffuse = max( dot( L, normal ), 0.0f ) / 3.141592653589793f;
const vec3 linear = ( 1 - metallicness ) * diffuse * albedo *
light_energy / light_distance2;
return linear;
}
BOOST_AUTO_TEST_CASE(max_diffuse)
{
vec3 l = diffuse(
vec3( 0.0f, 0.0f, 1.0f ), vec3( 1.0f, 0.0f, 1.0f ), vec3( 1.0f, 0.0f, 0.0f ),
vec3( 1.0f, 1.0f, 1.0f ), 0.0f, vec3( 1.0f, 1.0f, 1.0f )
);
BOOST_CHECK_CLOSE( l.x, 1.f/3.141592653589793f, 0.0001f );
}
ͦͷ··C++ͱͯ͠ਖ਼͍͠ίʔυ