Ejemplo n.º 1
0
        public static unsafe void TestRasterize()
        {
            Rasterizer.StartRasterize(CRenderSettings.ResolutionF);
            RenderBuffer <float>     tex0    = new RenderBuffer <float>(CRenderSettings.Resolution, 3);
            CharRenderBuffer <float> texChar = new CharRenderBuffer <float>(tex0);
            Vector2 *points = stackalloc Vector2[4];

            for (float i = 0; i < JMath.PI_TWO; i += .02f)
            {
                Vector2 dir      = new Vector2(MathF.Cos(i) * .3f, MathF.Sin(i) * .3f);
                Vector2 orthoDir = new Vector2(-dir.Y, dir.X);
                points[0] = new Vector2(.5f, .5f) + dir;
                points[1] = new Vector2(.5f, .5f) - dir;
                points[2] = new Vector2(.5f, .5f) + orthoDir;
                points[3] = new Vector2(.5f, .5f) - orthoDir;
                Rasterizer.SetPoints(points);
                Rasterizer.Line();
                Rasterizer.Line();
                tex0.WritePixel(Rasterizer.ContriveResult(), new GenericVector <float>(3)
                {
                    1f, 1f, 1f
                });
                CRenderer.Render(texChar);
                tex0.Clear();
                Thread.Sleep(16);
            }

            Rasterizer.EndRasterize();
        }
Ejemplo n.º 2
0
        public static unsafe void TestRasterizerLine()
        {
            Vector2 *line = stackalloc Vector2[2] {
                Vector2.Zero, Vector2.One
            };

            Rasterizer.StartRasterize(new Vector2(100, 100));
            Rasterizer.SetPoints(line);
            Rasterizer.Line();
            var resultArr = Rasterizer.ContriveResult();

            Assert.AreEqual(resultArr.Length, 100, 1);
            Rasterizer.EndRasterize();
        }
Ejemplo n.º 3
0
        public Maze()
        {
            Tiles = new Grid <int>(31, 31);
            Tiles.Clear(-1);

            // Generate graph
            Graph = Generate();

            // Render floors into tileset
            foreach (var source in Graph.Vertices)
            {
                // For each place visible
                foreach (var target in Graph.GetNeighbors(source))
                {
                    var aco = (1, 1) + (source * 2);
                    var bco = (1, 1) + (target * 2);

                    // Draw floors into tile map
                    foreach (var m in Rasterizer.Line(aco, bco))
                    {
                        Tiles[m] = 0;
                    }
                }
            }

            // Render walls
            foreach (var co in GetCoordinates(31, 31))
            {
                if (Tiles[co] == 0)
                {
                    continue;
                }                                 // already a floor
                else
                {
                    var north = co + (0, -1);
                    var south = co + (0, +1);
                    var west  = co + (-1, 0);
                    var east  = co + (+1, 0);

                    var face = Face.None;
                    if ((Tiles.IsValidCoordinate(north) && Tiles[north] == 0) || co.Y == 0)
                    {
                        face |= Face.North;
                    }
                    if ((Tiles.IsValidCoordinate(south) && Tiles[south] == 0) || co.Y == 30)
                    {
                        face |= Face.South;
                    }
                    if ((Tiles.IsValidCoordinate(east) && Tiles[east] == 0) || co.X == 30)
                    {
                        face |= Face.East;
                    }
                    if ((Tiles.IsValidCoordinate(west) && Tiles[west] == 0) || co.X == 0)
                    {
                        face |= Face.West;
                    }

                    // Cross Wall
                    if (face == Face.None)
                    {
                        Tiles[co] = 2;
                    }
                    else if (face == Face.North)
                    {
                        Tiles[co] = 2;
                    }
                    // Vertical Wall
                    else if (face.HasFlag(Face.East | Face.West))
                    {
                        Tiles[co] = face.HasFlag(Face.South) ? 8 : 3;
                    }
                    // Horizontal Wall
                    else if (face == (Face.South | Face.North | Face.East))
                    {
                        Tiles[co] = 9;
                    }
                    else if (face == (Face.South | Face.North | Face.West))
                    {
                        Tiles[co] = 10;
                    }
                    else if (face == (Face.South | Face.North))
                    {
                        Tiles[co] = 1;
                    }
                    else if (face == Face.South)
                    {
                        Tiles[co] = 1;
                    }
                    // Upper Right Corner
                    else if (face == (Face.East | Face.North))
                    {
                        Tiles[co] = 4;
                    }
                    else if (face == Face.East)
                    {
                        Tiles[co] = 4;
                    }
                    // Upper Left Corner
                    else if (face == (Face.West | Face.North))
                    {
                        Tiles[co] = 5;
                    }
                    else if (face == Face.West)
                    {
                        Tiles[co] = 5;
                    }
                    // Bottom Right Corner
                    else if (face == (Face.South | Face.East))
                    {
                        Tiles[co] = 6;
                    }
                    // Bottom Left Corner
                    else if (face == (Face.South | Face.West))
                    {
                        Tiles[co] = 7;
                    }
                    // Unable to determine tile to use
                    else
                    {
                        Tiles[co] = -1;
                    }
                }
            }
        }