From b11a7afab36cf6b30c094de559a04059ba82fa0b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20Nie=C3=9Fner?= Date: Fri, 14 May 2021 10:59:56 +0200 Subject: [PATCH] Update project structure --- Line.cs | 111 ----------------------------- ball.png => assets/ball.png | Bin line.fx => assets/shaders/line.fx | 0 src/Primitives/Line.cs | 114 ++++++++++++++++++++++++++++++ Program.cs => src/Program.cs | 6 +- 5 files changed, 118 insertions(+), 113 deletions(-) delete mode 100644 Line.cs rename ball.png => assets/ball.png (100%) rename line.fx => assets/shaders/line.fx (100%) create mode 100644 src/Primitives/Line.cs rename Program.cs => src/Program.cs (95%) diff --git a/Line.cs b/Line.cs deleted file mode 100644 index de79d9e..0000000 --- a/Line.cs +++ /dev/null @@ -1,111 +0,0 @@ -using System.Collections.Generic; -using System.Diagnostics; -using Microsoft.Xna.Framework; -using Microsoft.Xna.Framework.Graphics; - -public class Line -{ - private List points; - private float thickness = 1.0f; - - public enum JoinType - { - None, - Miter, - Bevel, - Round - } - - public enum LineCaps - { - None, - Round - } - - private Color LineColor { get; set; } - - //Graphical representation - private VertexBuffer vbo; - private IndexBuffer ibo; - private GraphicsDevice gDevice; - - public Line(List points) - { - this.points = points; - this.LineColor = Color.Black; - } - - public Line(List points, float thickness) - { - this.points = points; - this.thickness = thickness; - this.LineColor = Color.Black; - } - - public Line(List points, float thickness, Color color) - { - this.points = points; - this.thickness = thickness; - this.LineColor = color; - } - - public void InitOnGraphicalDevice(GraphicsDevice device) - { - this.gDevice = device; - Debug.Assert(this.points.Count >= 2); - List vertices = new List(); - List indices = new List(); - - for(int i = 0; i < this.points.Count - 1 ; i++) - { - var p = this.points[i]; - var pNext = this.points[i+1]; - - Vector2 dir = pNext - p; - Vector2 perpendincularVector = new Vector2(dir.Y, -dir.X); - perpendincularVector.Normalize(); - - var offsetPoint1 = new Vector3(p.X, p.Y ,0.0f); - var offsetPoint2 = new Vector3(p.X, p.Y ,0.0f); - vertices.Add(new VertexPositionColorTexture(offsetPoint1,this.LineColor, perpendincularVector)); - vertices.Add(new VertexPositionColorTexture(offsetPoint2,this.LineColor, perpendincularVector * -1)); - var offsetPoint1Next = new Vector3(pNext.X, pNext.Y ,0.0f); - var offsetPoint2Next = new Vector3(pNext.X, pNext.Y ,0.0f); - vertices.Add(new VertexPositionColorTexture(offsetPoint1Next,this.LineColor, perpendincularVector)); - vertices.Add(new VertexPositionColorTexture(offsetPoint2Next,this.LineColor, perpendincularVector * -1)); - } - - for (int i = 0; i < vertices.Count; i+=4) - { - indices.Add((ushort)(i)); - indices.Add((ushort)(i + 1)); - indices.Add((ushort)(i + 2)); - - indices.Add((ushort)(i + 2)); - indices.Add((ushort)(i + 1)); - indices.Add((ushort)(i + 3)); - } - - - this.vbo = new VertexBuffer(device, typeof(VertexPositionColorTexture), (this.points.Count - 1) * 4, BufferUsage.WriteOnly); - this.vbo.SetData(vertices.ToArray()); - this.ibo = new IndexBuffer(device, typeof(ushort), indices.Count,BufferUsage.WriteOnly); - this.ibo.SetData(indices.ToArray()); - } - - public void Draw(Effect lineEffect) - { - this.gDevice.SetVertexBuffer(this.vbo); - this.gDevice.Indices = this.ibo; - RasterizerState rasterizerState = new RasterizerState(); - rasterizerState.CullMode = CullMode.None; - this.gDevice.RasterizerState = rasterizerState; - lineEffect.Parameters["thickness"].SetValue(this.thickness); - foreach (EffectPass pass in lineEffect.CurrentTechnique.Passes) - { - pass.Apply(); - this.gDevice.DrawIndexedPrimitives(PrimitiveType.TriangleList,0,0,this.ibo.IndexCount / 3); - //this.gDevice.DrawPrimitives(PrimitiveType.LineList, 0, this.vbo.VertexCount); - } - } -} \ No newline at end of file diff --git a/ball.png b/assets/ball.png similarity index 100% rename from ball.png rename to assets/ball.png diff --git a/line.fx b/assets/shaders/line.fx similarity index 100% rename from line.fx rename to assets/shaders/line.fx diff --git a/src/Primitives/Line.cs b/src/Primitives/Line.cs new file mode 100644 index 0000000..67f5678 --- /dev/null +++ b/src/Primitives/Line.cs @@ -0,0 +1,114 @@ +using System.Collections.Generic; +using System.Diagnostics; +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Graphics; + +namespace MyGame.Primitives +{ + public class Line + { + private List points; + private float thickness = 1.0f; + + public enum JoinType + { + None, + Miter, + Bevel, + Round + } + + public enum LineCaps + { + None, + Round + } + + private Color LineColor { get; set; } + + //Graphical representation + private VertexBuffer vbo; + private IndexBuffer ibo; + private GraphicsDevice gDevice; + + public Line(List points) + { + this.points = points; + this.LineColor = Color.Black; + } + + public Line(List points, float thickness) + { + this.points = points; + this.thickness = thickness; + this.LineColor = Color.Black; + } + + public Line(List points, float thickness, Color color) + { + this.points = points; + this.thickness = thickness; + this.LineColor = color; + } + + public void InitOnGraphicalDevice(GraphicsDevice device) + { + this.gDevice = device; + Debug.Assert(this.points.Count >= 2); + List vertices = new List(); + List indices = new List(); + + for (int i = 0; i < this.points.Count - 1; i++) + { + var p = this.points[i]; + var pNext = this.points[i + 1]; + + Vector2 dir = pNext - p; + Vector2 perpendincularVector = new Vector2(dir.Y, -dir.X); + perpendincularVector.Normalize(); + + var offsetPoint1 = new Vector3(p.X, p.Y, 0.0f); + var offsetPoint2 = new Vector3(p.X, p.Y, 0.0f); + vertices.Add(new VertexPositionColorTexture(offsetPoint1, this.LineColor, perpendincularVector)); + vertices.Add(new VertexPositionColorTexture(offsetPoint2, this.LineColor, perpendincularVector * -1)); + var offsetPoint1Next = new Vector3(pNext.X, pNext.Y, 0.0f); + var offsetPoint2Next = new Vector3(pNext.X, pNext.Y, 0.0f); + vertices.Add(new VertexPositionColorTexture(offsetPoint1Next, this.LineColor, perpendincularVector)); + vertices.Add(new VertexPositionColorTexture(offsetPoint2Next, this.LineColor, perpendincularVector * -1)); + } + + for (int i = 0; i < vertices.Count; i += 4) + { + indices.Add((ushort)(i)); + indices.Add((ushort)(i + 1)); + indices.Add((ushort)(i + 2)); + + indices.Add((ushort)(i + 2)); + indices.Add((ushort)(i + 1)); + indices.Add((ushort)(i + 3)); + } + + + this.vbo = new VertexBuffer(device, typeof(VertexPositionColorTexture), (this.points.Count - 1) * 4, BufferUsage.WriteOnly); + this.vbo.SetData(vertices.ToArray()); + this.ibo = new IndexBuffer(device, typeof(ushort), indices.Count, BufferUsage.WriteOnly); + this.ibo.SetData(indices.ToArray()); + } + + public void Draw(Effect lineEffect) + { + this.gDevice.SetVertexBuffer(this.vbo); + this.gDevice.Indices = this.ibo; + RasterizerState rasterizerState = new RasterizerState(); + rasterizerState.CullMode = CullMode.None; + this.gDevice.RasterizerState = rasterizerState; + lineEffect.Parameters["thickness"].SetValue(this.thickness); + foreach (EffectPass pass in lineEffect.CurrentTechnique.Passes) + { + pass.Apply(); + this.gDevice.DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, 0, this.ibo.IndexCount / 3); + //this.gDevice.DrawPrimitives(PrimitiveType.LineList, 0, this.vbo.VertexCount); + } + } + } +} \ No newline at end of file diff --git a/Program.cs b/src/Program.cs similarity index 95% rename from Program.cs rename to src/Program.cs index 822cb5d..ebc4be4 100644 --- a/Program.cs +++ b/src/Program.cs @@ -3,6 +3,8 @@ using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; +using MyGame.Primitives; + namespace Barbs { class Program : Game @@ -19,7 +21,7 @@ namespace Barbs public Program() { graphics = new GraphicsDeviceManager(this); - Content.RootDirectory = "."; + Content.RootDirectory = "assets"; } protected override void Initialize() @@ -43,7 +45,7 @@ namespace Barbs projection = Matrix.CreatePerspectiveFieldOfView(MathHelper.ToRadians(45), 800f / 480f, 0.01f, 100f); basicEffect = new BasicEffect(GraphicsDevice); - lineEffect = Content.Load("line"); + lineEffect = Content.Load("shaders/line"); Vector2[] arr = { new Vector2(0.0f,0.0f), new Vector2(0.2f,0.5f), new Vector2(0.2f,0.0f), new Vector2(0.5f,0.0f), new Vector2(0.7f,-0.5f)};