public void LoadLights(Shader shader) { SetNumberOfLights(shader); int p = 0; int d = 0; int s = 0; int j; string uniformName = ""; _lights.ForEach(light => { if (light.type == LightTypeEnum.DIRECTIONAL_LIGHT) { uniformName = "directionalLights"; j = d++; shader.SetVector3(light.position, $"{uniformName}[{j}].direction"); } else if (light.type == LightTypeEnum.POINT_LIGHT) { uniformName = "pointLights"; j = p++; shader.SetVector3(light.position, $"{uniformName}[{j}].position"); } else { uniformName = "spotLights"; j = s++; SpotLight l = (SpotLight)light; shader.SetVector3(((SpotLight)light).direction, $"{uniformName}[{j}].direction"); shader.SetVector3(((SpotLight)light).position, $"{uniformName}[{j}].position"); shader.SetFloat(((SpotLight)light).cutoff, $"{uniformName}[{j}].cutoff"); shader.SetFloat(((SpotLight)light).outercutoff, $"{uniformName}[{j}].outercutoff"); } shader.SetFloat(light.constant, $"{uniformName}[{j}].constant"); shader.SetFloat(light.linear, $"{uniformName}[{j}].linear"); shader.SetFloat(light.quadratic, $"{uniformName}[{j}].quadratic"); shader.SetVector3(light.diffuse, $"{uniformName}[{j}].diffuse"); shader.SetVector3(light.ambient, $"{uniformName}[{j}].ambient"); shader.SetVector3(light.specular, $"{uniformName}[{j}].specular"); }); }
private void LoadLights(JArray lights) { JToken light; for (int i = 0; i < lights.Count; i++) { light = lights[i]; string type = (string)light["type"]; Vector3 position = light["position"].ToObject <Vector3>(); Vector3 ambient = light["ambient"].ToObject <Vector3>(); Vector3 diffuse = light["diffuse"].ToObject <Vector3>(); Vector3 specular = light["specular"].ToObject <Vector3>(); if (type.CompareTo("Point Light") == 0) { PointLight lightObj = new PointLight(position, ambient, diffuse, specular); lightObj.constant = (float)light["constant"]; lightObj.linear = (float)light["linear"]; lightObj.quadratic = (float)light["quadratic"]; lightSourceManager.AddLight(lightObj); } if (type.CompareTo("Directional Light") == 0) { DirectionalLight lightObj = new DirectionalLight(position, ambient, diffuse, specular); lightSourceManager.AddLight(lightObj); } if (type.CompareTo("Spot Light") == 0) { Vector3 direction = light["direction"].ToObject <Vector3>(); float cutoff = (float)light["cutoff"]; float outercutoff = (float)light["outercutoff"]; SpotLight lightObj = new SpotLight(position, ambient, diffuse, specular, direction, cutoff, outercutoff); lightObj.constant = (float)light["constant"]; lightObj.linear = (float)light["linear"]; lightObj.quadratic = (float)light["quadratic"]; lightSourceManager.AddLight(lightObj); } } }