MATLAB - Аппроксимация интеграла с полусферной областью с выборочными данными

Неотъемлемая часть уравнения рендеринга выполняет интеграл в диапазоне полусферы (относительно телесного угла).
Я могу сгенерировать образцы, которые несут значение соответствующего интеграла с этим кодом:

n = 10;
rho_s = 0.5;
rho_d = 0.5;

light_phi = degtorad(30);
light_theta = degtorad(60);
[lx ly lz] = sph2cart(light_phi, light_theta, 1);

refDir = cat(3, -lx, -ly, lz);
normal = cat(3, 0, 0, 1);

[sample_phi sample_theta] = meshgrid(0:12:360, 0:3:90);
[sample_x sample_y sample_z] = sph2cart(degtorad(sample_phi), degtorad(sample_theta), 1);
viewDir = cat(3, sample_x, sample_y, sample_z);

dotRL = sum(bsxfun(@times, viewDir, refDir), 3);
dotRL = max(dotRL, 0);

brdf_s = rho_s*(n+2)*(dotRL.^n)/(2*pi);
brdf_d = rho_d/pi;
brdf = brdf_s + brdf_d;

x = sample_x.*brdf; y = sample_y.*brdf; z = sample_z.*brdf;
mesh(x, y, z);
line([0 lx],[0 ly],[0 lz]);

axis equal; axis vis3d;
xlim([-1 1]); ylim([-1 1]); zlim([0 1]); 

Вопрос, с которым я сейчас сталкиваюсь, состоит в том, как сделать интеграл или приближение с этими образцами?

0 ответов

Другие вопросы по тегам