個々の物体に屈折率 Kn を与えて, 視線が物体に入射する前の屈折率と Kn の比が 1 でなく,かつ透明度 Kt が 0 でないものは, 向こう側が屈折して見えるようにしてください. 何もない部分の屈折率は 1 とします. Kn は,構造体 Material の要素に n を追加し, この構造体の変数のそれぞれの要素に格納するものとします.
struct Material {
float a[3]; /* 環境光に対する反射係数 Ka */
float d[3]; /* 物体表面の拡散反射係数 Kd */
float s[3]; /* 物体表面の鏡面反射係数 Ks */
float e; /* ハイライトの広がり */
float r; /* 映り込みの反射率 */
float t; /* 透明度 */
float n; /* 屈折率 */
};
struct Material red = {
{ 0.5, 0.1, 0.1 },
{ 0.5, 0.1, 0.1 },
{ 0.4, 0.4, 0.4 },
40.0,
1.0,
0.5,
1.5,
};
struct Material green = {
{ 0.1, 0.5, 0.1 },
{ 0.1, 0.5, 0.1 },
{ 0.4, 0.4, 0.4 },
40.0,
1.0,
0.8,
1.5,
};
struct Material blue = {
{ 0.1, 0.1, 0.5 },
{ 0.1, 0.1, 0.5 },
{ 0.4, 0.4, 0.4 },
40.0,
1.0,
0.3,
1.5,
};
このとき,映り込みも同時に実現してください.