コード例 #1
0
 public static void RenderRoundedLine(Vector2d position, Vector2d position2, Color color, float thickness, bool knobs = false, bool redknobs = false)
 {
     using (new GLEnableCap(EnableCap.Blend))
     {
         using (new GLEnableCap(EnableCap.Texture2D))
         {
             var vertices = GenRoundedLine(position, position2, color, thickness, knobs, redknobs);
             if (vertices.Count != 0)
             {
                 _roundlinevao.Texture = StaticRenderer.CircleTex;
                 _roundlinevao.Clear();
                 foreach (var v in vertices)
                 {
                     _roundlinevao.AddVertex(v);
                 }
                 _roundlinevao.SetOpacity(color.A / 255f);
                 GL.BlendFunc(BlendingFactorSrc.SrcAlpha, BlendingFactorDest.OneMinusSrcAlpha);
                 _roundlinevao.Draw(PrimitiveType.Triangles);
                 _roundlinevao.Texture = 0;
             }
         }
     }
 }
コード例 #2
0
        public static void DrawScarf(DynamicLine[] lines, float opacity)
        {
            GLEnableCap blend = null;

            if (opacity < 1)
            {
                blend = new GLEnableCap(EnableCap.Blend);
                GL.BlendFunc(BlendingFactorSrc.SrcAlpha, BlendingFactorDest.OneMinusSrcAlpha);
            }

            GameDrawingMatrix.Enter();
            VAO  scarf = new VAO(false, true);//VAO does not need disposing, it does not allocate a buffer
            bool t     = false;

            for (int i = 0; i < lines.Length; i++)
            {
                Color    c      = Color.FromArgb((byte)(255 * opacity), 209, 1, 1);
                var      alt    = Color.FromArgb((byte)(255 * opacity), 255, 100, 100);
                var      diff   = lines[i].Position2 - lines[i].Position;
                var      dangle = MathHelper.RadiansToDegrees(Math.Atan2(diff.Y, diff.X)) + 90;
                Vector2d q1;
                Vector2d q2;
                Vector2d q3;
                Vector2d q4;
                float    size = 2;
                if (i == 0)
                {
                    var    diff2   = lines[i + 1].Position2 - lines[i + 1].Position;
                    var    dangle2 = MathHelper.RadiansToDegrees(Math.Atan2(diff2.Y, diff2.X)) + 90;
                    Turtle turtle  = new Turtle(lines[i].Position);
                    turtle.Move(dangle2, -(size / 2));
                    q1 = turtle.Point;
                    turtle.Move(0, size);
                    q2           = turtle.Point;
                    turtle.Point = lines[i].Position2;
                    turtle.Move(dangle, size / 2);
                    q3 = turtle.Point;
                    turtle.Move(0, -size);
                    q4 = turtle.Point;
                }
                else
                {
                    var    diff2   = lines[i - 1].Position2 - lines[i - 1].Position;
                    var    dangle2 = MathHelper.RadiansToDegrees(Math.Atan2(diff2.Y, diff2.X)) + 90;
                    Turtle turtle  = new Turtle(lines[i].Position);
                    turtle.Move(dangle2, -(size / 2));
                    q1 = turtle.Point;
                    turtle.Move(0, size);
                    q2           = turtle.Point;
                    turtle.Point = lines[i].Position2;
                    turtle.Move(dangle, size / 2);
                    q3 = turtle.Point;
                    turtle.Move(0, -size);
                    q4 = turtle.Point;
                }
                scarf.AddVertex(new Vertex((Vector2)q1, t ? c : alt));
                scarf.AddVertex(new Vertex((Vector2)q2, t ? c : alt));
                scarf.AddVertex(new Vertex((Vector2)q3, t ? c : alt));
                scarf.AddVertex(new Vertex((Vector2)q4, t ? c : alt));
                t = !t;
            }
            scarf.Draw(PrimitiveType.Quads);
            GameDrawingMatrix.Exit();

            if (blend != null)
            {
                blend.Dispose();
            }
        }