У меня есть объемный набор данных, который я могу визуализировать (это было частью домашней работы). Я уже реализовал приведение лучей с использованием композиции «спереди к спине» и хочу интегрировать затенение фонгом.Для вычисления градиента я использую метод разности вперед.
Я знаю, что могу оценить градиент координаты текстуры вокселя с помощью метода разности вперед.
Мой вопрос будет, так как phong-Затенение возвращает цвет, а прямое и обратное вещание также возвращает цвет. Когда я применяю затенение к цвету функции луча?После того, как я определил свой новый цвет для определенного луча или во время вычисления цвета от попадания луча?Может быть, этот кусок кода помогает понять мою проблему.Я добавил комментарии о том, где, как мне кажется, мне следует реализовать затенение по Фонгу.
void main(){
if (raycast(t0,t1)) {
float t = t0;
for(float t =t0; t<t1;t+=stepsize){
vec3 p = ray_o + ray_d * t;
vec3 coord = worldToVolumeCoord(p, min_box, max_box);
float s = texture(tex_vol, coord).r;
vec4 color = texture(tex_tf, s);
if(color.a > 0){
// Front to back , when to apply shading?????
C = C + (1-A) * color.a * vec3(color);
A = A + (1-A) * color.a;
}
// vec3 Gradient = getGradient(tex_vol, coord, stepsize)
// But how to apply Phong Shading?
}
// Apply phong here?
}
}