这种照明计算如何运作?

时间:2017-10-27 19:00:35

标签: c++ qt graphics 3d lighting

我有一段负责点亮金字塔的代码。

float Geometric3D::calculateLight(int vert1, int vert2, int vert3) {

    float ax = tabX[vert2] - tabX[vert1];
    float ay = tabY[vert2] - tabY[vert1];
    float az = tabZ[vert2] - tabZ[vert1];

    float bx = tabX[vert3] - tabX[vert1];
    float by = tabY[vert3] - tabY[vert1];
    float bz = tabZ[vert3] - tabZ[vert1];

    float Nx = (ay * bz) - (az * by);
    float Ny = (az * bx) - (ax * bz);;
    float Nz = (ax * by) - (ay * bx);;

    float Lx = -300.0f;
    float Ly = -300.0f;
    float Lz = -1000.0f;

    float lenN = sqrtf((Nx * Nx) + (Ny * Ny) + (Nz * Nz));
    float lenL = sqrtf((Lx * Lx) + (Ly * Ly) + (Lz * Lz));

    float res = ((Nx * Lx) + (Ny * Ly) + (Nz * Lz)) / (lenN * lenL);
    if (res < 0.0f)
        res = -res;
    return res;
}

最后我无法理解计算结果。有人能解释一下他们背后的数学吗?我知道首先程序计算平面的两个向量来计算它的法线(它适用于向量N)。矢量L代表照明,但接下来会发生什么?为什么我们计算法线和光线的长度然后乘以它并除以它们的尺寸?

0 个答案:

没有答案