3template<size_t lightCount>
4LightMaterial<lightCount>::LightMaterial() {
5 for (uint8_t i = 0; i < lightCount; i++){
6 lights[lightCount].Set(Vector3D(1000, 0, 0), Vector3D(255, 0, 0), 1000.0f, 0.5f, 0.5f);
10template<size_t lightCount>
11Light* LightMaterial<lightCount>::GetLights(){
15template<size_t lightCount>
16uint8_t LightMaterial<lightCount>::GetLightCount(){
20template<size_t lightCount>
21RGBColor LightMaterial<lightCount>::GetRGB(const Vector3D& position, const Vector3D& normal, const Vector3D& uvw) {
24 for (uint8_t l = 0; l < lightCount; l++) {
25 Vector3D lVector = lights[l].GetPosition();
27 float angle = normal.DotProduct(lVector.UnitSphere());
30 float lDistance = lights[l].GetPosition().CalculateEuclideanDistance(position) / lights[l].GetFalloff();
31 float intensity = 1.0f / (1.0f + lDistance * lights[l].GetCurveA() + powf(lDistance / lights[l].GetFalloff(), 2.0f) * lights[l].GetCurveB());
33 color = color + (lights[l].GetIntensity() * angle * intensity);
37 return RGBColor(color);