課題04で作成したプログラムを, 複数の球を表示できるように修正してください. その際,物体ごとに色を変えるようにしてください.
複数の球のデータを表現するには, 球のデータを保持している構造体 Sphere の変数 sphere を配列にします.NDATA はデータの個数です. 球ごとに色を変えるには,構造体 Material の変数も複数用意してください.
struct Material red = {
{ 0.5, 0.1, 0.1 },
{ 0.5, 0.1, 0.1 },
{ 0.4, 0.4, 0.4 },
40.0,
};
struct Material green = {
{ 0.1, 0.5, 0.1 },
{ 0.1, 0.5, 0.1 },
{ 0.4, 0.4, 0.4 },
40.0,
};
struct Material blue = {
{ 0.1, 0.1, 0.5 },
{ 0.1, 0.1, 0.5 },
{ 0.4, 0.4, 0.4 },
40.0,
};
...
struct Sphere sphere[] = {
{
{ 0.0, 0.0, 10.0 },
2.0,
&red,
},
{
{ -2.0, 2.0, 8.0 },
1.0,
&green,
},
{
{ 2.0, 1.0, 7.0 },
1.1,
&blue,
}
...
};
#define NDATA (sizeof(sphere) / sizeof(sphere[0]))
このデータを表示するには,関数 trace() において, このデータの中から t(視点と交差点の距離に相当します)が最も小さいものを選び, その球のデータを使って反射光強度を求めます.