public RocketModel(IVertexCoder <Vertex> coder) { SimpleMesh mesh = new SimpleMesh(); mesh.AddRange(Compose(new Triangle( new Vector3(0, 0, 1), new Vector3(1f / 3, -1f / 3, 1f / 3), new Vector3(1f / 3, 1f / 3, 1f / 3) ))); mesh.AddRange(Compose(Mesh.Quad( new Vector3(1f / 3, -1f / 3, 1f / 3), new Vector3(1f / 3, -1f / 3, -1), new Vector3(1f / 3, 1f / 3, -1), new Vector3(1f / 3, 1f / 3, 1f / 3) ))); mesh.AddRange(Compose(new Triangle( new Vector3(1f / 3, 0, -1f / 3), new Vector3(1f / 3, 0, -1f), new Vector3(2f / 3, 0, -1f) ))); mesh.AddRange(Mesh.Quad( new Vector3(1f / 3, -1f / 3, -1f), new Vector3(-1f / 3, -1f / 3, -1f), new Vector3(-1f / 3, 1f / 3, -1f), new Vector3(1f / 3, 1f / 3, -1f) )); _bfr = mesh.ToBuffer(coder); }
public GuiLayer(Window w, GlProgram pgm, IVertexCoder <GuiVertex> coder, Font fnt) { _win = w ?? throw new ArgumentNullException(nameof(w)); _pgm = pgm ?? throw new ArgumentNullException(nameof(pgm)); _array = new VertexArray <GuiVertex>(coder, 4) { [0] = new GuiVertex(new Vector2(0, 0), new Vector2(0, 1)), [1] = new GuiVertex(new Vector2(1, 0), new Vector2(1, 1)), [2] = new GuiVertex(new Vector2(1, 1), new Vector2(1, 0)), [3] = new GuiVertex(new Vector2(0, 1), new Vector2(0, 0)) }; _indices = new IndexBuffer(6, _array) { [0] = 0, [1] = 1, [2] = 2, [3] = 0, [4] = 2, [5] = 3, }; _font = fnt ?? throw new ArgumentNullException(nameof(fnt)); _uColor = pgm.GetUniform("uColor"); _uColor.EnsureType(new ShaderElementType(PrimitiveTypes.Float, 4)); _uTexture = pgm.GetUniform("uTexture"); _uTexture.EnsureType(new ShaderElementType(PrimitiveTypes.Sampler, 2)); _uTextureEnabled = pgm.GetUniform("uTextureEnabled"); _uTextureEnabled.EnsureType(new ShaderElementType(PrimitiveTypes.Bool, 1)); _uTransform = pgm.GetUniform("uTransform"); _uTransform.EnsureType(new ShaderElementType(PrimitiveTypes.Matrix, 4)); _uScale = pgm.GetUniform("uScale"); _uScale.EnsureType(new ShaderElementType(PrimitiveTypes.Float, 2)); }
public RectangleModel(IVertexCoder <Vertex> coder) { _vtx = new VertexArray <Vertex>(coder, 4) { [0] = new Vertex(new Vector3(-1, -1, 0), new Vector3(-1, -1, 0).Normalized()), [1] = new Vertex(new Vector3(-1, 1, 0), new Vector3(-1, 1, 0).Normalized()), [2] = new Vertex(new Vector3(1, 1, 0), new Vector3(1, 1, 0).Normalized()), [3] = new Vertex(new Vector3(1, -1, 0), new Vector3(1, -1, 0).Normalized()) }; _idx = new IndexBuffer(6, _vtx) { [0] = 0, [1] = 1, [2] = 2, [3] = 2, [4] = 3, [5] = 0 }; }
public SphereModel(IVertexCoder <Vertex> coder, int bups) { List <Triangle> triangles = new List <Triangle> { new Triangle(new Vector3(1, 0, 0), new Vector3(0, 1, 0), new Vector3(0, 0, 1)) }; for (int i = 0; i < bups; i++) { for (int j = triangles.Count - 1; j >= 0; j--) { triangles.AddRange(triangles[j].BreakUp()); triangles.RemoveAt(j); } } int octant = triangles.Count; for (int i = 1; i <= 3; i++) { float sin = (float)Math.Sin(i * (float)Math.PI / 2); float cos = (float)Math.Cos(i * (float)Math.PI / 2); for (int j = octant - 1; j >= 0; j--) { Triangle self = triangles[j]; Triangle rot = self.RotateZ(sin, cos); triangles.Add(rot); if (i == 1) { triangles.Add(self.FlipZ()); } triangles.Add(rot.FlipZ()); } } SimpleMesh mesh = new SimpleMesh(); mesh.AddRange(triangles.Select(i => new Engine.Geometry.Triangle(i.A, i.B, i.C))); _indices = mesh.ToBuffer(coder); }
public IndexBuffer ToBuffer(IVertexCoder<T> coder) { List<T> vertices = new List<T>(); List<Vector3> vecs = new List<Vector3>(); List<uint> indices = new List<uint>(); foreach (Triangle t in Triangles) { foreach (Vector3 v in t) { uint idx; if (vecs.Contains(v)) idx = (uint) vecs.IndexOf(v); else { idx = (uint) vecs.Count; vecs.Add(v); vertices.Add(ToVertex(v, Triangles.Where(i => i.Contains(v)).Aggregate(Vector3.Zero, (current, i) => current + i.Normal).Normalized())); } indices.Add(idx); } } return new IndexBuffer(indices, new VertexArray<T>(coder, vertices)); }
public GuiFuelLayer(RocketObject rkt, Window w, GlProgram pgm, IVertexCoder <GuiVertex> coder, Font fnt) : base(w, pgm, coder, fnt) { _rkt = rkt ?? throw new ArgumentNullException(nameof(rkt)); _fuelPbr = new ProgressBar(); Add(_fuelPbr); }