光线追踪器光线漫射的问题

时间:2019-12-27 17:21:39

标签: c opengl raytracing

我写了光漫射代码,但不起作用,我不知道为什么

这是我编写的用于扩散的代码

            t_vec pi = vec_add(ray.org,vec_times_double(ray.dir, t));
            t_vec hp = vec_diff(light.pos, pi);
            t_vec normal = get_sphers_normal(sp, pi);
            double dot = vec_dot(normalize_vect(normal),normalize_vect(hp));
            printf("hitpoint : %lf\n", dot);
            put_pixel(mlx.img, x, y, rgb_to_int(sp.color)*double_abs(dot), resolution.width);

this is the result I got

1 个答案:

答案 0 :(得分:0)

在这一行:

 put_pixel(mlx.img, x, y, rgb_to_int(sp.color)*double_abs(dot), resolution.width);
                          ^-----------------------------------

您似乎正在将整数乘以双精度。我假设put_pixel期望使用32位整数来编码RGB颜色,在这种情况下,您的double会转换回int,但以一种无意义的方式给出了这些色带。例如,如果sp.color = { 255., 0., 0. }是红色表面,则rgb_to_int将其转换为0xff0000,再乘以0.00390625(昏暗的表面),然后转换回int得到0x00ff00,它是亮绿色而不是深红色。

您应该对rgb_to_int的参数使用 vector times scalar 函数:

rgb_to_int(vec_times_double(sp.color, double_abs(dot)))

我在这里假设sp.color的类型为t_vec。如果不是,则相应地调整您的代码。