示例#1
0
        public static void AddCircle(this DynamicPrimitive dynamicPrimitive, Vector3 center, float radius, int tessellation, Color color, Matrix4x4?world = null, float lineWidth = 1)
        {
            dynamicPrimitive.BeginPrimitive(PrimitiveType.LineStrip, null, world, lineWidth);
            {
                if (tessellation < 3)
                {
                    throw new ArgumentOutOfRangeException("tessellation");
                }

                int horizontalSegments = tessellation;

                // Create a single ring of vertices at this latitude.
                for (int j = 0; j <= horizontalSegments; j++)
                {
                    float longitude = j * MathHelper.TwoPI / horizontalSegments;

                    float dx = (float)Math.Cos(longitude);
                    float dy = (float)Math.Sin(longitude);

                    Vector3 normal = new Vector3(dx, dy, 0);

                    dynamicPrimitive.AddVertex(normal * radius + center, color);
                }
            }
            dynamicPrimitive.EndPrimitive();
        }
示例#2
0
 public static void AddLine(this DynamicPrimitive dynamicPrimitive, Vector3 v1, Vector3 v2, Color color, Matrix4x4?world = null, float lineWidth = 1)
 {
     dynamicPrimitive.BeginPrimitive(PrimitiveType.Lines, null, world, lineWidth);
     {
         dynamicPrimitive.AddVertex(v1, color);
         dynamicPrimitive.AddVertex(v2, color);
     }
     dynamicPrimitive.EndPrimitive();
 }
示例#3
0
 public static void AddLine(this DynamicPrimitive dynamicPrimitive, IEnumerable <Vector3> lineStrip, Color color, Matrix4x4?world = null, float lineWidth = 1)
 {
     dynamicPrimitive.BeginPrimitive(PrimitiveType.LineStrip, null, world, lineWidth);
     {
         foreach (Vector3 position in lineStrip)
         {
             dynamicPrimitive.AddVertex(position, color);
         }
     }
     dynamicPrimitive.EndPrimitive();
 }
示例#4
0
        // TODO: Plane is in 3D

        public static void AddPlane(this DynamicPrimitive dynamicPrimitive, Plane plane, float size, int tessellation, Color color, Matrix4x4?world = null, float lineWidth = 1)
        {
            var transform = MathHelper.CreateRotation(new Vector3(0, 1, 0), plane.Normal) *
                            Matrix4x4.CreateTranslation(plane.Normal * plane.D);

            if (world.HasValue)
            {
                transform *= world.Value;
            }

            AddGrid(dynamicPrimitive, 0, 0, 0, size, size, tessellation, tessellation, color, transform, lineWidth);
        }
示例#5
0
        public static void AddSolidRectangle(this DynamicPrimitive dynamicPrimitive, Vector2 min, Vector2 max, Color color, TextureId?texture = null, Matrix4x4?world = null)
        {
            dynamicPrimitive.BeginPrimitive(PrimitiveType.Triangles, texture, world);
            {
                dynamicPrimitive.AddVertex(new Vector3(min.X, min.Y, 0), color, new Vector2(0, 0));
                dynamicPrimitive.AddVertex(new Vector3(min.X, max.Y, 0), color, new Vector2(0, 1));
                dynamicPrimitive.AddVertex(new Vector3(max.X, max.Y, 0), color, new Vector2(1, 1));
                dynamicPrimitive.AddVertex(new Vector3(max.X, min.Y, 0), color, new Vector2(1, 0));

                dynamicPrimitive.AddIndex(0);
                dynamicPrimitive.AddIndex(1);
                dynamicPrimitive.AddIndex(2);

                dynamicPrimitive.AddIndex(2);
                dynamicPrimitive.AddIndex(3);
                dynamicPrimitive.AddIndex(0);
            }
            dynamicPrimitive.EndPrimitive();
        }
示例#6
0
        // TODO: Add more advanced texture rectangles
        //       Like texture region and texture rotation

        public static void AddRectangle(this DynamicPrimitive dynamicPrimitive, Vector2 min, Vector2 max, Color color, Matrix4x4?world = null, float lineWidth = 1)
        {
            dynamicPrimitive.BeginPrimitive(PrimitiveType.Lines, null, world, lineWidth);
            {
                dynamicPrimitive.AddVertex(new Vector3(min.X, min.Y, 0), color);
                dynamicPrimitive.AddVertex(new Vector3(min.X, max.Y, 0), color);
                dynamicPrimitive.AddVertex(new Vector3(max.X, max.Y, 0), color);
                dynamicPrimitive.AddVertex(new Vector3(max.X, min.Y, 0), color);

                dynamicPrimitive.AddIndex(0);
                dynamicPrimitive.AddIndex(1);
                dynamicPrimitive.AddIndex(1);
                dynamicPrimitive.AddIndex(2);
                dynamicPrimitive.AddIndex(2);
                dynamicPrimitive.AddIndex(3);
                dynamicPrimitive.AddIndex(3);
                dynamicPrimitive.AddIndex(0);
            }
            dynamicPrimitive.EndPrimitive();
        }
示例#7
0
        public static void AddGrid(this DynamicPrimitive dynamicPrimitive, float x, float y, float z, float width, float height, int countX, int countZ, Color color, Matrix4x4?world = null, float lineWidth = 1)
        {
            dynamicPrimitive.BeginPrimitive(PrimitiveType.Lines, null, world, lineWidth);
            {
                float incU = width / countX;
                float incV = height / countZ;

                for (int u = 0; u <= countX; u++)
                {
                    dynamicPrimitive.AddVertex(new Vector3(x + 0, y, z + u * incU), color);
                    dynamicPrimitive.AddVertex(new Vector3(x + height, y, z + u * incU), color);
                }

                for (int v = 0; v <= countZ; v++)
                {
                    dynamicPrimitive.AddVertex(new Vector3(x + v * incV, y, z + 0), color);
                    dynamicPrimitive.AddVertex(new Vector3(x + v * incV, y, z + width), color);
                }
            }
            dynamicPrimitive.EndPrimitive();
        }
示例#8
0
        public static void AddRectangle(this DynamicPrimitive dynamicPrimitive, Vector2 min, Vector2 max, Vector3 up, Color color, Matrix4x4?world = null, float lineWidth = 1)
        {
            var transform = MathHelper.CreateRotation(new Vector3(0, 1, 0), up);

            dynamicPrimitive.BeginPrimitive(PrimitiveType.Lines, null, world, lineWidth);
            {
                dynamicPrimitive.AddVertex(Vector3.TransformNormal(new Vector3(min.X, min.Y, 0), transform), color);
                dynamicPrimitive.AddVertex(Vector3.TransformNormal(new Vector3(min.X, max.Y, 0), transform), color);
                dynamicPrimitive.AddVertex(Vector3.TransformNormal(new Vector3(max.X, max.Y, 0), transform), color);
                dynamicPrimitive.AddVertex(Vector3.TransformNormal(new Vector3(max.X, min.Y, 0), transform), color);

                dynamicPrimitive.AddIndex(0);
                dynamicPrimitive.AddIndex(1);
                dynamicPrimitive.AddIndex(1);
                dynamicPrimitive.AddIndex(2);
                dynamicPrimitive.AddIndex(2);
                dynamicPrimitive.AddIndex(3);
                dynamicPrimitive.AddIndex(3);
                dynamicPrimitive.AddIndex(0);
            }
            dynamicPrimitive.EndPrimitive();
        }
示例#9
0
        // TODO: Add with Nine.Geometry
        //public static void AddSolidRectangle(this DynamicPrimitive dynamicPrimitive, BoundingRectangle rectangle, Color color, TextureId? texture = null, Matrix4x4? world = null)
        //    => AddSolidRectangle(dynamicPrimitive, new Vector2(rectangle.Left, rectangle.Top), new Vector2(rectangle.Right, rectangle.Bottom), color, texture, world);

        public static void AddSolidRectangle(this DynamicPrimitive dynamicPrimitive, Rectangle rectangle, Color color, TextureId?texture = null, Matrix4x4?world = null)
        => AddSolidRectangle(dynamicPrimitive, new Vector2(rectangle.Left, rectangle.Top), new Vector2(rectangle.Right, rectangle.Bottom), color, texture, world);
示例#10
0
 public static void AddGrid(this DynamicPrimitive dynamicPrimitive, float x, float y, float z, float step, int countX, int countZ, Color color, Matrix4x4?world = null, float lineWidth = 1)
 => AddGrid(dynamicPrimitive, x, y, z, step * countX, step * countZ, countX, countZ, color, world, lineWidth);