gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 16:55:25 29 4
gpt4 key购买 nike

我得到了表面法线和光照位置的点积。奇怪的是点积大于 1。这是问题 1。

第二个问题是我想将强度从 0->1 映射到 Float 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);
}

最佳答案

我假设您了解什么是标量积,无论如何它们都是|a|*|b|*cos θ。它们肯定可能大于或小于 1,因为 cos θ 至多为 1,将 vector 相乘,除非它们是单位 vector ,否则肯定会导致不同的数字。

此外,要将强度映射到 RGB(如果 RGB 在标准 0-255 范围内),相乘不会有太大帮助,您需要在范围之间对其进行标准化,如下所示:

(颜色/255)*强度

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

如果这没有帮助,请进一步澄清问题。 (我还不能发表评论,所以我尽我所能回答)。

关于c - 将强度从点积映射到浮点 RGB 0->1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40317980/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com