/// <summary> /// Creates a node that can hold a light source. /// </summary> /// <param name="name">The name of this light node</param> public LightNode(String name) : base(name) { lightSource = new LightSource(); global = true; castShadows = true; worldTransform = Matrix.Identity; lightViewProjection = Matrix.Identity; ambientLightColor = new Vector4(0, 0, 0, 1); hasChanged = true; lightProjection = Matrix.CreatePerspectiveFieldOfView(MathHelper.PiOver4, 1, 1, 1000); lightFrustum = new BoundingFrustum(lightProjection); zero = Vector3.Zero; up = Vector3.Up; }
private void CreateLights() { // Create a directional light source LightSource lightSource = new LightSource(); lightSource.Direction = new Vector3(-1, -1, 0); lightSource.Diffuse = Color.White.ToVector4(); lightSource.Specular = Color.White.ToVector4(); // Create a light node to hold the light source LightNode lightNode = new LightNode(); lightNode.LightSources.Add(lightSource); // Add this light node to the root node scene.RootNode.AddChild(lightNode); }
private void CreateLights() { // Create a directional light source LightSource lightSource = new LightSource(); lightSource.Direction = new Vector3(1, -1, -1); lightSource.Diffuse = Color.White.ToVector4(); lightSource.Specular = new Vector4(0.6f, 0.6f, 0.6f, 1); // Create a light node to hold the light source LightNode lightNode = new LightNode(); lightNode.LightSource = lightSource; // Set this light node to cast shadows (by just setting this to true will not cast any shadows, // scene.ShadowMap needs to be set to a valid IShadowMap and Model.Shader needs to be set to // a proper IShadowShader implementation lightNode.CastShadows = true; // You should also set the light projection when casting shadow from this light lightNode.LightProjection = Matrix.CreatePerspectiveFieldOfView(MathHelper.PiOver4, 1, 1f, 500); scene.RootNode.AddChild(lightNode); }
private void CreateLights() { // Create a directional light source LightSource lightSource = new LightSource(); lightSource.Direction = new Vector3(1, -1, -1); lightSource.Diffuse = new Vector4(0.8f, 0.8f, 0.8f, 1); lightSource.Specular = new Vector4(0.6f, 0.6f, 0.6f, 1); // Create a light node to hold the light source LightNode lightNode = new LightNode(); // Add an ambient component lightNode.AmbientLightColor = new Vector4(0.3f, 0.3f, 0.3f, 1); lightNode.LightSources.Add(lightSource); // Add this light node to the root node groundMarkerNode.AddChild(lightNode); }
public override void Load(XmlElement xmlNode) { base.Load(xmlNode); if (xmlNode.HasAttribute("Global")) global = bool.Parse(xmlNode.GetAttribute("Global")); if (xmlNode.HasAttribute("CastShadows")) castShadows = bool.Parse(xmlNode.GetAttribute("CastShadows")); if (xmlNode.HasAttribute("AmbientLightColor")) ambientLightColor = Vector4Helper.FromString(xmlNode.GetAttribute("AmbientLightColor")); XmlElement lightSourceXml = (XmlElement)xmlNode.ChildNodes[0]; lightSource = (LightSource)Activator.CreateInstance( Type.GetType(lightSourceXml.Name)); lightSource.Load(lightSourceXml); }
private void CreateLights() { // Create a directional light source LightSource lightSource = new LightSource(); lightSource.Direction = new Vector3(1, -1, -1); lightSource.Diffuse = new Vector4(0.8f, 0.8f, 0.8f, 1); lightSource.Specular = new Vector4(0.6f, 0.6f, 0.6f, 1); // Create a light node to hold the light source LightNode lightNode = new LightNode(); lightNode.CastShadows = true; lightNode.LightProjection = Matrix.CreatePerspectiveFieldOfView(MathHelper.PiOver4, 1, 1f, 500); // Add an ambient component lightNode.AmbientLightColor = new Vector4(0.3f, 0.3f, 0.3f, 1); lightNode.LightSource = lightSource; // Add this light node to the root node groundMarkerNode.AddChild(lightNode); }
private void CreateLights() { // Create two directional light sources LightSource lightSource1 = new LightSource(); lightSource1.Direction = new Vector3(-1, -1, -1); lightSource1.Diffuse = Color.White.ToVector4(); lightSource1.Specular = new Vector4(0.6f, 0.6f, 0.6f, 1); LightSource lightSource2 = new LightSource(); lightSource2.Direction = new Vector3(0, 1, 0); lightSource2.Diffuse = Color.White.ToVector4()*.2f; lightSource2.Specular = new Vector4(0.2f, 0.2f, 0.2f, 1); // Create a light node to hold the light sources LightNode lightNode1 = new LightNode(); lightNode1.LightSource = lightSource1; LightNode lightNode2 = new LightNode(); lightNode2.LightSource = lightSource2; // Add this light node to the root node scene.RootNode.AddChild(lightNode1); scene.RootNode.AddChild(lightNode2); }
private void SetUpSingleLightSource(LightSource lightSource) { light.StructureMembers["direction"].SetValue(lightSource.Direction); light.StructureMembers["position"].SetValue(lightSource.Position); light.StructureMembers["falloff"].SetValue(lightSource.Falloff); light.StructureMembers["range"].SetValue(lightSource.Range); light.StructureMembers["color"].SetValue(lightSource.Diffuse); light.StructureMembers["attenuation0"].SetValue(lightSource.Attenuation0); light.StructureMembers["attenuation1"].SetValue(lightSource.Attenuation1); light.StructureMembers["attenuation2"].SetValue(lightSource.Attenuation2); light.StructureMembers["innerConeAngle"].SetValue(lightSource.InnerConeAngle); light.StructureMembers["outerConeAngle"].SetValue(lightSource.OuterConeAngle); }
static private int compareLightSource(LightSource l1, LightSource l2) { if ((int)l1.Type > (int)l2.Type) { return 1; } else if (l1.Type == l2.Type) { return 0; } else { return -1; } }
/// <summary> /// Copy constructor /// </summary> /// <param name="light"></param> public LightSource(LightSource light) { position = light.Position; direction = light.Direction; lightType = light.Type; enabled = light.Enabled; diffuse = light.Diffuse; specular = light.Specular; attenuation0 = light.Attenuation0; attenuation1 = light.Attenuation1; attenuation2 = light.Attenuation2; falloff = light.Falloff; innerConeAngle = light.InnerConeAngle; outerConeAngle = light.OuterConeAngle; range = light.Range; hasChanged = true; }
public override void SetParameters(List<LightNode> globalLights, List<LightNode> localLights) { bool ambientSet = false; this.lightSources.Clear(); LightNode lNode = null; Vector4 ambientLightColor = new Vector4(0, 0, 0, 1); // traverse the local lights in reverse order in order to get closest light sources // in the scene graph for (int i = localLights.Count - 1; i >= 0; i--) { lNode = localLights[i]; // only set the ambient light color if it's not set yet and not the default color (0, 0, 0, 1) if (!ambientSet && (!lNode.AmbientLightColor.Equals(ambientLightColor))) { ambientLightColor = lNode.AmbientLightColor; ambientSet = true; } // skip the light source if not enabled if (!lNode.LightSource.Enabled) continue; LightSource source = new LightSource(lNode.LightSource); if (lNode.LightSource.Type != LightType.Directional) source.Position = lNode.LightSource.TransformedPosition; if (lNode.LightSource.Type != LightType.Point) source.Direction = lNode.LightSource.TransformedDirection; lightSources.Add(source); } // Next, traverse the global lights in normal order for (int i = 0; i < globalLights.Count; i++) { lNode = globalLights[i]; // only set the ambient light color if it's not set yet and not the default color (0, 0, 0, 1) if (!ambientSet && (!lNode.AmbientLightColor.Equals(ambientLightColor))) { ambientLightColor = lNode.AmbientLightColor; ambientSet = true; } // skip the light source if not enabled if (!lNode.LightSource.Enabled) continue; LightSource source = new LightSource(lNode.LightSource); if (lNode.LightSource.Type != LightType.Directional) source.Position = lNode.LightSource.TransformedPosition; if (lNode.LightSource.Type != LightType.Point) source.Direction = lNode.LightSource.TransformedDirection; lightSources.Add(source); } dirLightSources.Clear(); pointLightSources.Clear(); spotLightSources.Clear(); foreach (LightSource l in lightSources) { switch (l.Type) { case LightType.Directional: dirLightSources.Add(l); break; case LightType.Point: pointLightSources.Add(l); break; case LightType.SpotLight: spotLightSources.Add(l); break; } } this.ambientLightColor.SetValue(ambientLightColor); }
private void CreateLights() { // Create a directional light source LightSource lightSource = new LightSource(); lightSource.Direction = new Vector3(1, -1, -1); lightSource.Diffuse = Color.White.ToVector4(); lightSource.Specular = new Vector4(0.6f, 0.6f, 0.6f, 1); // Create a light node to hold the light source LightNode lightNode = new LightNode(); lightNode.LightSource = lightSource; scene.RootNode.AddChild(lightNode); }
private void ConfigureState() { State.LineManager.LineShader = new GoblinXNA.Shaders.Line3DShader("LineRendering.fx"); State.LineManager.ShaderTechnique = "LineRendering3D"; State.ShowFPS = true; State.ShowNotifications = true; scene.PreferPerPixelLighting = true; scene.EnableShadowMapping = true; Notifier.Placement = Notifier.NotifierPlacement.TopRight; Notifier.Color = Color.Red; Notifier.CustomStartLocation = new Vector2(1300, 350); Notifier.CustomAppearDirection = new Vector2(0, 20); Notifier.FadeOutTime = 2000; LightSource lightSource1 = new LightSource(); lightSource1.Direction = new Vector3(-1, -2, 0); lightSource1.Diffuse = Color.White.ToVector4(); lightSource1.Specular = new Vector4(0.6f, 0.6f, 0.6f, 1); // Create a light node to hold the light sources LightNode lightNode1 = new LightNode(); lightNode1.LightSource = lightSource1; scene.RootNode.AddChild(lightNode1); useStaticImage = false; }
private void CreateLights() { // Create a directional light source LightSource lightSource = new LightSource(); lightSource.Direction = new Vector3(-0.8f, -0.5f, -1f); lightSource.Diffuse = Color.White.ToVector4(); lightSource.Specular = new Vector4(0.6f, 0.6f, 0.6f, 1); // Create a light node to hold the light source LightNode lightNode = new LightNode(); lightNode.AmbientLightColor = new Vector4(0.2f, 0.2f, 0.2f, 1); lightNode.LightSource = lightSource; // Add this light node to the root node scene.RootNode.AddChild(lightNode); }
public void SetParameters(List<LightNode> globalLights, List<LightNode> localLights) { bool ambientSet = false; ClearBasicEffectLights(); lightSources.Clear(); LightNode lNode = null; Vector4 ambientLightColor = new Vector4(0, 0, 0, 1); // traverse the local lights in reverse order in order to get closest light sources // in the scene graph for (int i = localLights.Count - 1; i >= 0; i--) { lNode = localLights[i]; // only set the ambient light color if it's not set yet and not the default color (0, 0, 0, 1) if (!ambientSet && (!lNode.AmbientLightColor.Equals(ambientLightColor))) { ambientLightColor = lNode.AmbientLightColor; ambientSet = true; } if (lightSources.Count < MaxLights) { // skip the light source if not enabled or not a directional light if (!lNode.LightSource.Enabled || (lNode.LightSource.Type != LightType.Directional)) continue; LightSource source = new LightSource(); source.Diffuse = lNode.LightSource.Diffuse; source.Direction = lNode.LightSource.TransformedDirection; source.Specular = lNode.LightSource.Specular; lightSources.Add(source); // If there are already 3 lights, then skip other lights if (lightSources.Count >= MaxLights) break; } } // Next, traverse the global lights in normal order for (int i = 0; i < globalLights.Count; i++) { lNode = globalLights[i]; // only set the ambient light color if it's not set yet and not the default color (0, 0, 0, 1) if (!ambientSet && (!lNode.AmbientLightColor.Equals(ambientLightColor))) { ambientLightColor = lNode.AmbientLightColor; ambientSet = true; } if (lightSources.Count < MaxLights) { // skip the light source if not enabled or not a directional light if (!lNode.LightSource.Enabled || (lNode.LightSource.Type != LightType.Directional)) continue; LightSource source = new LightSource(); source.Diffuse = lNode.LightSource.Diffuse; source.Direction = lNode.LightSource.TransformedDirection; source.Specular = lNode.LightSource.Specular; lightSources.Add(source); // If there are already 3 lights, then skip other lights if (lightSources.Count >= MaxLights) break; } } ambientLight = Vector3Helper.GetVector3(ambientLightColor); if (lightSources.Count > 0) { DirectionalLight[] lights = {basicEffect.DirectionalLight0, basicEffect.DirectionalLight1, basicEffect.DirectionalLight2}; bool atLeastOneLight = false; int numLightSource = lightSources.Count; for (int i = 0; i < numLightSource; i++) { lights[i].Enabled = true; lights[i].DiffuseColor = Vector3Helper.GetVector3(lightSources[i].Diffuse); lights[i].Direction = lightSources[i].Direction; lights[i].SpecularColor = Vector3Helper.GetVector3(lightSources[i].Specular); atLeastOneLight = true; } basicEffect.LightingEnabled = atLeastOneLight; } basicEffect.AmbientLightColor = ambientLight; lightsChanged = true; }
private void CreateLights() { // Create a directional light source LightSource lightSource = new LightSource(); lightSource.Direction = new Vector3(-1, -1, -1); lightSource.Diffuse = Color.White.ToVector4(); LightSource lightSource2 = new LightSource(); lightSource2.Direction = new Vector3(1, 0, 0); lightSource2.Diffuse = Color.White.ToVector4(); LightSource lightSource3 = new LightSource(); lightSource3.Direction = new Vector3(-0.5f, 0, 1); lightSource3.Diffuse = new Vector4(0.5f, 0.5f, 0.5f, 1); // Create a light node to hold the light source LightNode lightNode1 = new LightNode(); lightNode1.LightSource = lightSource; LightNode lightNode2 = new LightNode(); lightNode2.LightSource = lightSource2; LightNode lightNode3 = new LightNode(); lightNode3.LightSource = lightSource3; scene.RootNode.AddChild(lightNode1); scene.RootNode.AddChild(lightNode2); scene.RootNode.AddChild(lightNode3); }