изображение выглядит не так плохо . Когда я пытался воссоздать вашу сцену в моем GLSL ray tracer , я получил такой результат:
Как вы можете видеть, этоне так уж сильно отличается друг от друга освещения. Я только угадал позиции, размеры, цвета, коэффициенты отражения и преломления, поэтому моя сцена не точно такая же, как ваша:
ray.beg();
// r g b rfl rfr n x y z rx ry rz
ray.add_material(0.8,0.8,0.6,0.0,0.0,_n_glass); ray.add_box ( 0.0, 0.0,-10.0,10.0,10.0, 0.1);
ray.add_material(0.8,0.8,0.6,0.0,0.0,_n_glass); ray.add_box ( 0.0, 0.0,+10.0,10.0,10.0, 0.1);
ray.add_material(1.0,0.1,0.1,0.0,0.0,_n_glass); ray.add_box (-10.0, 0.0, 0.0, 0.1,10.0,10.0);
ray.add_material(0.1,1.0,0.1,0.0,0.0,_n_glass); ray.add_box (+10.0, 0.0, 0.0, 0.1,10.0,10.0);
ray.add_material(0.8,0.6,0.8,0.0,0.0,_n_glass); ray.add_box ( 0.0,-10.0, 0.0,10.0, 0.1,10.0);
ray.add_material(0.8,0.6,0.8,0.0,0.0,_n_glass); ray.add_box ( 0.0,+10.0, 0.0,10.0, 0.1,10.0);
// r g b rfl rfr n x y z r
ray.add_material(0.7,0.0,0.0,0.0,0.0,_n_glass); ray.add_sphere (+ 1.5,- 1.5,+ 0.5,1.5);
ray.add_material(0.0,0.0,0.7,0.8,0.0,_n_glass); ray.add_sphere (- 1.5,+ 1.5,- 0.5,1.5);
ray.end();
Я использую следующие индексы:
const GLfloat _n_glass=1.561;
const GLfloat _n_vacuum=1.0;
Искажение(отсутствие отражения) на краях вашей синей сферы может быть вызвано низкой точностью, вы использовали double
с? Я не знаю, какие библиотеки вы используете, но Vec3
обычно означает только поплавки, попробуйте dVec3
или что-нибудь еще ... проблема может быть связана с этим:
, которые на чистых float
s имеют тенденцию вызывать подобные артефакты, даже шум на краях отражающих / преломляющих сфер. Здесь тот же мой двигатель, но на float
с:
, как вы можете видеть, шум чаще в тех областях, где ваш выход невообще не отражайте, что указывает на аналогичную причину ...
Однако я вижу на вашем изображении некоторые искажения соотношения сторон , как вы ожидали квадратное окно и вместо этого получили прямоугольник 640x480, так что вынет коррекции соотношения сторон или нет. Это может слегка испортить направление наведенных лучей и еще больше исказить изображение после отражения / преломления ...