/********************************************************************* 功 能:实现Gouraud光照模型,求给定点的漫放射光强; 参数含义: Pt[3] : 点的坐标, Vertices:点Pt所在的四边形的四个顶点坐标,顶点按逆时针顺序存放 Normals :四个顶点的法向量,和Vertices按同样的顺序存放; lightPos:光源的位置 Ip :漫放射光源的强度 Kd :漫放射系数 返 回 值: 点Pt的漫放射光强;

可调用函数: =========================================================================== bool BilinearInterpolation(int Vertices[4][3], int P[3], double uv[4]); 功 能:在凸四边形中实现二次线性插值

 参数含义:
      Vertices    : 四边形的四个顶点,按逆时针存储;
      P           : 点的坐标
      uv          : 用于返回插值系数;

 返 回 值: True-插值成功,Flase-插值失败(如果Pt不在四边形内部,则失败)
 ===========================================================================

日 期: 2009-10-20 作 者: 罗月童 **********************************************************************/ double CIlluminationView::Gouraud (int Pt[3], int Vertices[4][3], double Normals[4][3], int lightPos[3], double Ip, double Kd) { double I = 0; //光照强度 double Iv[4] = {0}; //四个顶点的光照强度 double uv[4] = {0}; //四个顶点的插值系数

//计算四个顶点的光照强度
for(int i = 0; i < 4; i++)
{
    Iv[i] = DensityOnPoint(Vertices[i], Normals[i], lightPos, Ip, Kd);
}

//进行二次线性插值
if(BilinearInterpolation(Vertices, Pt, uv))
{
    //根据插值系数计算Pt点的光照强度
    for(int i = 0; i < 4; i++)
    {
        I += Iv[i] * uv[i];
    }
}

return I;

}

Gouraud光照模型实现 - 计算给定点的漫放射光强

原文地址: https://www.cveoy.top/t/topic/lVIS 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录