public float GetRayToLineSegmentIntersection(LineOccluder lineOccluder) { //Direction.Normalize(); Vector2 v1 = Origin - lineOccluder.StartPoint; Vector2 v2 = lineOccluder.EndPoint - lineOccluder.StartPoint; Vector2 v3 = new Vector2(-Direction.Y, Direction.X); float dot = Vector2.Dot(v2, v3); if (Math.Abs(dot) < 0.000001f) { return(-1.0f); } float t1 = MathCompanion.CrossProduct(v2, v1) / dot; float t2 = Vector2.Dot(v1, v3) / dot; if (t1 >= 0.0f && t2 >= 0.0f && t2 <= 1.0f) { t = t1; HitSomething = true; return(t1); } return(-1.0f); }
public ShadowCaster() { lineOccluders = new LineOccluder[4]; for (int i = 0; i < lineOccluders.Length; i++) { lineOccluders[i] = new LineOccluder(); } }
public LineOccluder[] ConvertToLineOccluders(Rectangle Rect) { lineOccluders[0] = new LineOccluder(new Vector2(Rect.Left, Rect.Top), new Vector2(Rect.Right, Rect.Top)); lineOccluders[1] = new LineOccluder(new Vector2(Rect.Right, Rect.Top), new Vector2(Rect.Right, Rect.Bottom)); lineOccluders[2] = new LineOccluder(new Vector2(Rect.Right, Rect.Bottom), new Vector2(Rect.Left, Rect.Bottom)); lineOccluders[3] = new LineOccluder(new Vector2(Rect.Left, Rect.Bottom), new Vector2(Rect.Left, Rect.Top)); return(lineOccluders); }
public override void Start() { SR = gameObject.GetComponent <SpriteRenderer>(); Rectangle Occluder = SR.Sprite.DynamicScaledRect(); lineOccluders[0] = new LineOccluder(new Vector2(Occluder.Left, Occluder.Top), new Vector2(Occluder.Right, Occluder.Top)); lineOccluders[1] = new LineOccluder(new Vector2(Occluder.Right, Occluder.Top), new Vector2(Occluder.Right, Occluder.Bottom)); lineOccluders[2] = new LineOccluder(new Vector2(Occluder.Right, Occluder.Bottom), new Vector2(Occluder.Left, Occluder.Bottom)); lineOccluders[3] = new LineOccluder(new Vector2(Occluder.Left, Occluder.Bottom), new Vector2(Occluder.Left, Occluder.Top)); }
public LineOccluder[] ConvertToLineOccluders() { Rectangle Occluder = SR.Sprite.DynamicScaledRect(); lineOccluders[0] = new LineOccluder(new Vector2(Occluder.Left, Occluder.Top), new Vector2(Occluder.Right, Occluder.Top)); lineOccluders[1] = new LineOccluder(new Vector2(Occluder.Right, Occluder.Top), new Vector2(Occluder.Right, Occluder.Bottom)); lineOccluders[2] = new LineOccluder(new Vector2(Occluder.Right, Occluder.Bottom), new Vector2(Occluder.Left, Occluder.Bottom)); lineOccluders[3] = new LineOccluder(new Vector2(Occluder.Left, Occluder.Bottom), new Vector2(Occluder.Left, Occluder.Top)); return(lineOccluders); }
//public void Rebuild() //Not for high level users //{ // //LIGHTS.Add(this); //} public static void Init_Light() { if (!ShaderLoaded || LightEffect.IsDisposed) { PointsTriangle = new List <Vector2>(); Points = new List <Vector2>(); HandyList = new List <LineOccluder>(); RenderTarget2D = new RenderTarget2D(Setup.GraphicsDevice, Setup.graphics.PreferredBackBufferWidth, Setup.graphics.PreferredBackBufferHeight, false, Setup.GraphicsDevice.PresentationParameters.BackBufferFormat, DepthFormat.Depth24); SceneManager.SceneTexPtr = Scene.GuiRenderer.BindTexture(RenderTarget2D); //LIGHTS = new List<Light>(); LightEffect = Setup.Content.Load <Effect>("LightTest"); ShaderLoaded = true; ShadowMap = new RenderTarget2D(Setup.GraphicsDevice, Setup.graphics.PreferredBackBufferWidth, Setup.graphics.PreferredBackBufferHeight, false, Setup.GraphicsDevice.PresentationParameters.BackBufferFormat, DepthFormat.None); //Depth is not needed BorderOccluders = new LineOccluder[4]; BorderOccluders[0] = new LineOccluder(); BorderOccluders[1] = new LineOccluder(); BorderOccluders[2] = new LineOccluder(); BorderOccluders[3] = new LineOccluder(); ShadowMap_param = LightEffect.Parameters["ShadowMap"]; DirectionalIntensity_param = LightEffect.Parameters["DirectionalIntensity"]; LightCount_param = LightEffect.Parameters["LightCount"]; AngularRadius_param = LightEffect.Parameters["AngularRadius"]; X_Bias_param = LightEffect.Parameters["X_Bias"]; Y_Bias_param = LightEffect.Parameters["Y_Bias"]; YOverX_param = LightEffect.Parameters["YOverX"]; Color_param = LightEffect.Parameters["Color"]; Radius_param = LightEffect.Parameters["Radius"]; InnerRadius_param = LightEffect.Parameters["InnerRadius"]; InnerIntensity_param = LightEffect.Parameters["InnerIntensity"]; Attenuation_param = LightEffect.Parameters["Attenuation"]; CastShadows_param = LightEffect.Parameters["CastShadows"]; CastShadow_param = LightEffect.Parameters["CastShadow"]; ShadowConstant_param = LightEffect.Parameters["ShadowConstant"]; //CameraPosNorm_param = LightEffect.Parameters["CameraPosNorm"]; } //LIGHTS.Add(this); YOVERX = (float)Setup.graphics.PreferredBackBufferHeight / Setup.graphics.PreferredBackBufferWidth; if (RenderTarget2D == null) { RenderTarget2D = new RenderTarget2D(Setup.GraphicsDevice, Setup.graphics.PreferredBackBufferWidth, Setup.graphics.PreferredBackBufferHeight, false, Setup.GraphicsDevice.PresentationParameters.BackBufferFormat, DepthFormat.Depth24); SceneManager.SceneTexPtr = Scene.GuiRenderer.BindTexture(RenderTarget2D); } Setup.GraphicsDevice.SetRenderTarget(RenderTarget2D); //Render Target }