问题六十八:Phong反射模型的C++实现

1 Phong反射模型


这一章节,我们将实现Phong反射模型。

问题六十八:Phong反射模型的C++实现_第1张图片

环境光的部分:先不解释,后面来填这个坑;

 

漫反射光和高光反射光部分:

入射光(光源)的辐射率;

入射光和表面法向量的夹角的余弦值;

可以理解为漫反射的BRDF;

可以理解为高光反射的BRDF;

 

2 程序的结构


首先定义一个图形(比如,球);然后给球设置材质;材质的物理属性决定了其对应的反射模型;各种反射模型则需要用到其对应的BRDF值。

逆向来看,则是:BRDF设置给反射模型;反射模型设置给材质;材质设置给图形。


2.1 BRDF


漫反射的BRDF:

问题六十八:Phong反射模型的C++实现_第2张图片


高光反射的BRDF:

问题六十八:Phong反射模型的C++实现_第3张图片

 

2.2 BRDF设置给反射模型


问题六十八:Phong反射模型的C++实现_第4张图片

2.3反射模型设置给材质


这个主要体现在材质的着色成员方法中。

问题六十八:Phong反射模型的C++实现_第5张图片

 

2.4材质设置给图形


在初始化的build()中:

问题六十八:Phong反射模型的C++实现_第6张图片

3 对此测试图形


Blinn-Phong反射模型:ka = 0.25;kd = 0.75; ks = 0.1; exp = 10;

问题六十八:Phong反射模型的C++实现_第7张图片

 

Blinn-Phong反射模型:ka = 0.00;kd = 0.75; ks = 0.1; exp = 10;

问题六十八:Phong反射模型的C++实现_第8张图片

 

Blinn-Phong反射模型:ka = 0.25;kd = 0.5; ks = 0.1; exp = 10;

问题六十八:Phong反射模型的C++实现_第9张图片

 

Blinn-Phong反射模型:ka = 0.25;kd = 0.25; ks = 0.1; exp = 10;

问题六十八:Phong反射模型的C++实现_第10张图片

 

Blinn-Phong反射模型:ka = 0.1;kd = 0.25; ks = 0.1; exp = 10;

问题六十八:Phong反射模型的C++实现_第11张图片

 

Blinn-Phong反射模型:ka = 0.1;kd = 0.25; ks = 0.25; exp = 10;

问题六十八:Phong反射模型的C++实现_第12张图片

 

Blinn-Phong反射模型:ka = 0.1;kd = 0.25; ks = 0.5; exp = 10;

问题六十八:Phong反射模型的C++实现_第13张图片

 

Blinn-Phong反射模型:ka = 0.1;kd = 0.5; ks = 0.25; exp = 10;

问题六十八:Phong反射模型的C++实现_第14张图片


ka = 0.1;kd = 0.5; ks = 0.25; exp = 20;

问题六十八:Phong反射模型的C++实现_第15张图片

 

4 其他说明

完整的代码,参考:http://download.csdn.net/detail/libing_zeng/9757762

 

Referrance

[1]. Kevin Suffern, Ray Tracing from the GroundUp, A K Peters Ltd, 2007.

 

你可能感兴趣的:(C++,ray,trace,computer,graphics,Phong,Blinn-Phong,C++,反射模型,计算机图形)