将点强度从点积映射到浮点RGB 0-> 1

时间:2016-10-29 10:05:24

标签: c graphics rendering

我得到了表面法线和光线位置的点积。奇怪的是点积大于1.那个问题的编号为1。

第二个问题是我想将强度从0-> 1映射到浮点RGB从0-> 1 这是我的代码

    if (the_object->polys[curr_poly].shading == 1)
            {

                // compute the dot product between the light source vector
                // and normal vector to surface

                dp = Dot_Product_3D((vector_3d_ptr)&normal,
                    (vector_3d_ptr)&light_source);

                // test if light ray is reflecting off surface

                if (dp > 0)
                {
                    // now cos 0 = (u.v)/|u||v| or

                    intensity = ambient_light + ( dp / (the_object->polys[curr_poly].normal_length));


                    float r = the_object->polys[curr_poly].color.R*intensity;
                    float g = the_object->polys[curr_poly].color.G*intensity;
                    float b = the_object->polys[curr_poly].color.B*intensity;
                    Color color = Color(r, g, b, 1);
}

1 个答案:

答案 0 :(得分:0)

我假设您了解标量产品是什么,无论如何它们都是|a|*|b|*cos Θ。它们当然可以大于或小于1,因为cosθ最多为1,乘以向量,除非它们是单位向量肯定会导致各种数字。

另外,要在强度与RGB之间进行映射,(如果RGB在标准0-255范围内),乘以它对你没有多大帮助,你需要在范围之间将其标准化,如下所示:

(color / 255) * intensity

您还可以在值之间夹住颜色,这样就不会出现过度曝光等情况。

如果这没有帮助,请进一步澄清问题。 (我无法评论,所以我尽可能多地回答。)