|
|
最近在看3D游戏编程大师技巧,写的真的很棒
不过在光照函数这张遇到问题咯
谁也看过这本书的大大,帮偶解决一下
我只列出关键代码
//无穷远光源
float i;//强度
VECTOR4D u,v,n;
VECTOR4D_Build(&obj->vlist_trans[vindex_0],
&obj->vlist_tran[vindex+1],&u);
//散射公式
//Itotald=Rsdiffuse*Idiffuse*(n.l) Rsdiffuse是漫反射颜色 Idiffuse是光源的散射光强度
//法线n与光照L的点积
dp=VECTOR4D_Dot(&n , &lights[curr_light].dir);
if(dp>0)
{
//乘128是避免浮点计算
i=128*dp/nl;//归一化dp?为什么要归一化这不懂。。。
//将每个分量与多边形颜色相乘,并除以256,以确保为0-255之间
r_sum+=(lights[curr_light].c_diffuse.r * r_base* i) / (256*128);
//问题就在这,如果说dp=(n.l),那么r_base=Rsdiffuse?,c_diffuse.r=Idifuse?
//r_base是物体上的颜色,书中说颜色本身就是反射系数
//我的理解是否正确?好象只有这样理解才能跟公式对应咯~~~
g_sum+=..............;
b_sum+=..................;
} |
|