public void CreateContainingBoxSquareTest() { var width = 10f; var height = 10f; var aspect = width / height; var fitBox = Box2DExtensions.CreateContainingBox(width, height, aspect); Assert.AreEqual(new Box2D(0, 0, width, height), fitBox); }
private static void LandscapeTest(float width, float height, float aspect) { var fitBox = Box2DExtensions.CreateContainingBox(width, height, aspect); var delta = .0001f; Assert.AreEqual(0f, fitBox.MinX, delta); Assert.AreEqual(-.5f * (aspect * width - height), fitBox.MinY, delta); Assert.AreEqual(width, fitBox.SizeX, delta); Assert.AreEqual(width / aspect, fitBox.SizeY, delta); }
private static void PortraitTest(float width, float height, float aspect) { var fitBox = Box2DExtensions.CreateContainingBox(width, height, aspect); var delta = .0001f; Assert.AreEqual(-.5f * (aspect * height - width), fitBox.MinX, delta); Assert.AreEqual(0f, fitBox.MinY, delta); Assert.AreEqual(height * aspect, fitBox.SizeX, delta); Assert.AreEqual(height, fitBox.SizeY, delta); }
/// <summary> /// Transforms elements coordinates relative to given canvas system into [0,1]² with y-axis heading upwards /// </summary> /// <param name="element">Input UIElement to transform relative to canvas</param> /// <param name="canvas">Input canvas for realative transformation</param> public static Box2D ConvertBounds(this UIElement element, Canvas canvas) { var p00 = new Point(0, 0); var p11 = p00 + (Vector)element.RenderSize; var leftTop = (Vector)element.TranslatePoint(p00, canvas); var rightBottom = (Vector)element.TranslatePoint(p11, canvas); //flip y coordinate return(Box2DExtensions.CreateFromMinMax( (float)leftTop.X, (float)(canvas.ActualHeight - rightBottom.Y), (float)rightBottom.X, (float)(canvas.ActualHeight - leftTop.Y))); }
public void Render(IReadOnlyBox2D bounds) { GL.Clear(ClearBufferMask.ColorBufferBit); GL.MatrixMode(MatrixMode.Projection); GL.LoadIdentity(); var fitBox = Box2DExtensions.CreateContainingBox(bounds.SizeX, bounds.SizeY, aspect); GL.Ortho(fitBox.MinX, fitBox.MaxX, fitBox.MinY, fitBox.MaxY, 0, 1); GL.MatrixMode(MatrixMode.Modelview); foreach (var layer in layers) { layer.Value.Draw(); } }
internal void DrawLevelState(ILevelGrid levelState, Color tint) { UpdateLevelGeometry(levelState); shdTexColor.Activate(); texArray.Activate(); var fitBox = Box2DExtensions.CreateContainingBox(levelState.Width, levelState.Height, windowAspect); var camera = Matrix4x4.CreateOrthographicOffCenter(fitBox.MinX, fitBox.MaxX, fitBox.MinY, fitBox.MaxY, 0, 1); shdTexColor.Uniform(nameof(tint), tint.ToVector4()); shdTexColor.Uniform(nameof(camera), camera, true); vaoLevelGeometry.Draw(levelState.Width * levelState.Height); texArray.Deactivate(); shdTexColor.Deactivate(); }
public void Render() { var newStick = RotateLine(stick, Angle); var stickAABB = Box2DExtensions.CreateFromPoints(new Vector2[] { newStick.Item1, newStick.Item2 }); GL.Clear(ClearBufferMask.ColorBufferBit); GL.Color3(Color.CornflowerBlue); DrawLine(newStick); GL.Color3(Color.YellowGreen); DrawAABB(stickAABB); GL.Color3(Color.Black); DrawAABB(Box2DExtensions.CreateFromCenterSize(0, 0, 0.02f, 0.02f)); }
public IEnumerable <IReadOnlyBox2D> GetPlanets() { var planets = new List <Box2D>(); Foreach(root, (node) => { if (node.GetInstance <CreateGeometryTag>() is null) { return; } var xForm = node.GlobalTransformation; var newCenter = xForm.Transform(Vector2.Zero); var size = xForm.Transform(new Vector4(1f, 0f, 0f, 0f)).XY().Length(); var bounds = Box2DExtensions.CreateFromCenterSize(newCenter.X, newCenter.Y, size, size); planets.Add(bounds); }); return(planets); }
public void DrawLevelState(ILevelGrid level, Color tint) { GL.Color3(tint); GL.LoadIdentity(); var fitBox = Box2DExtensions.CreateContainingBox(level.Width, level.Height, windowAspect); GL.Ortho(fitBox.MinX, fitBox.MaxX, fitBox.MinY, fitBox.MaxY, 0.0, 1.0); for (int x = 0; x < level.Width; ++x) { for (int y = 0; y < level.Height; ++y) { var tile = new Box2D(x, y, 1.0f, 1.0f); var element = level.GetElement(x, y); var tex = tileSet[element]; tex.Activate(); tile.DrawTexturedRect(Box2D.BOX01); tex.Deactivate(); } } }
public void Render(IReadOnlyList <Vector2> points, int selectedPoint, float truckPos) { GL.Clear(ClearBufferMask.ColorBufferBit); GL.LoadIdentity(); GL.Ortho(-windowAspect, windowAspect, -1, 1, 0, 1); shaderRoad.Activate(); texSand.Activate(); DrawLineStrip(points); texSand.Deactivate(); shaderRoad.Deactivate(); GL.Color3(Color.Red); GL.PointSize(15.0f); DrawPoints(points); if (-1 != selectedPoint) { GL.Color3(Color.Blue); GL.PointSize(25.0f); DrawPoint(points[selectedPoint]); } var pos = CubicHermiteSpline.CatmullRomSpline(points, truckPos); GL.Color3(Color.White); //GL.Color3(Color.Green); //GL.PointSize(25.0f); shaderTruck.Activate(); texTruck.Activate(); DrawTools.DrawTexturedRect(Box2DExtensions.CreateFromCenterSize(pos.X, pos.Y, 0.1f, 0.1f), Box2D.BOX01); texTruck.Deactivate(); shaderTruck.Deactivate(); //DrawPoint(pos); }
public Model(Vector2 start, Grid <bool> walkable) { this.walkable = walkable ?? throw new ArgumentNullException(nameof(walkable)); player = Box2DExtensions.CreateFromCenterSize(start.X, start.Y, 1f, 1f); }
public void Resize(IGameState gameState, int width, int height) { var fitBox = Box2DExtensions.CreateContainingBox(gameState.GridWidth, gameState.GridHeight, width / (float)height); toClipSpace = Matrix4.CreateOrthographicOffCenter(fitBox.MinX, fitBox.MaxX, fitBox.MinY, fitBox.MaxY, 0f, 1f); }
public TransformedShape(float x, float y, float size) { this.bounds = Box2DExtensions.CreateFromCircle(new Circle(x, y, size / 2)); transformedBounds = new Box2D(bounds); SetTransformation(Matrix3x2.Identity); }