Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 光线跟踪器灯光漫反射问题_C_Opengl_Raytracing - Fatal编程技术网

C 光线跟踪器灯光漫反射问题

C 光线跟踪器灯光漫反射问题,c,opengl,raytracing,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

我写了光扩散代码,但它不起作用,我不知道为什么

这是我为扩散编写的代码

            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);

在这一行中:

 put_pixel(mlx.img, x, y, rgb_to_int(sp.color)*double_abs(dot), resolution.width);
                          ^-----------------------------------
你好像在用一个整数乘以一个双精度。我假设
put\u pixel
需要一个32位整数编码RGB颜色,在这种情况下,您的双精度将转换回int,但以一种没有意义的方式,给出这些色带。例如,如果
sp.color={255,0,0.}
是一个红色表面,
rgb___int
将其转换为
0xff0000
,将其乘以
0.00390625
(光线暗淡的表面)并转换回
int
得到
0x00ff00
,它是亮绿色而不是暗红色

您应该在参数to
rgb_to_int
上使用向量乘以标量函数:

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

这里我假设
sp.color
t\u vec
类型。如果没有,则相应地调整代码。

您好,尽管我认为我发现了您的问题(请参见下面的答案),但我强烈建议至少包含相关函数的声明。更妙的是,发一个帖子。