固定機能GLでも使用される標準のPhongまたはBlinn-Phong照明モデルが必要だと思います。
放射性の用語は、マテリアルがそれ自体で放出する色です(たとえば、ライトをモデリングする場合)。つまり、最終的な色に追加されるだけです。
color = emissive;
周囲項は、無限に反射された光による間接照明の計算をシミュレートするため、光の位置に依存せず、ほぼすべての場所に存在します。したがって、マテリアルのアンビエントはライトの色で乗算され、最終的な色に追加されます。
color += ambient * lightColor;
拡散項は、すべての方向に均等に光を反射する標準のランバート反射をシミュレートします。これは、光の方向と表面の法線との間の角度に依存し、角度が小さいほど光が多くなります。
lightDir = normalize(lightPos-facePos);
color += dot(lightDir, normal) * diffuse * lightColor;
鏡面反射用語は、最終的に、より多くの光を単一の方向(完全な反射方向)に反射する鏡面反射面をシミュレートします。したがって、顔を見ている方向によって異なります。さらに、反射率は、表面の粗さ(または実際にはGLが使用する名前でもあるその光沢)を表す別のパラメータに依存します。値が大きいほど、ハイライトがシャープになります。より「光沢のある」)。
viewDir = normalize(cameraPos-facePos);
halfVec = normalize(lightDir+viewDir);
color += pow(dot(normal, halfVec), shininess) * specular * lightColor;
もちろん、周囲光、拡散反射光、鏡面反射光の項は、すべての光について計算する必要があります。
距離減衰のない単純なポイントライト以外のより複雑なライトについては、他のことを考慮する必要がありますが、この単純なモデルで始めることができます。