《一週學完光線追蹤》學習 五點五 多方位測試上一節的程序

蒙特卡洛光線追蹤技術系列 見 蒙特卡洛光線追蹤技術

測試一:在main函數裏把第二個球體的改爲如下:

	list[1] = new sphere(vec3(-0.8, 0, -1), 0.5);

結果:

這說明我們的攝像機還存在一定的問題。攝像機由於是一個透視結構(近大遠小),所以會造成形變。

測試二:把兩個球順序交換一下:

	list[0] = new sphere(vec3(-0.8, 0, -1), 0.5);
	list[1] = new sphere(vec3(0, 0, -1), 0.5);

得到結果:

和上面一樣,說明交點不與列表先後順序有關。我們重看一下剛纔的程序:

	double closest_so_far = tmax;
	for (int i = 0;i < list_size;i++) {
		if (list[i]->hit(r, tmin, closest_so_far, temp_rec)) {
			hit_anything = true;
			closest_so_far = temp_rec.t;
			rec = temp_rec;
		}
	}

可知我們的視野範圍會不斷變化,把能看到的最遠點不斷更新,所以前面的會擋住後面的。

測試三:繼續修改爲:

	list[0] = new sphere(vec3(0.0, 0.0, -1.0), 1.5);
	list[1] = new sphere(vec3(0, 0, -1), 0.5);

結果:

這個時候小球被套在大球內部了。

我們再修改爲:

	list[0] = new sphere(vec3(0.0, 0.0, -2.0), 1.3);
	list[1] = new sphere(vec3(0, 0, -0.5), 0.2);

結果:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章