Exemplo n.º 1
0
        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");
            });
        }
Exemplo n.º 2
0
        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);
                }
            }
        }