private void RefreshSelectionMesh() { if (m_SelectionMesh != null) { m_SelectionMesh.CleanupMeshes(); } MeshBuilder mb = new MeshBuilder(); if (_selectedItem != null) { mb.Add(0, new MeshBuilder.Rectangle(_selectedItem.Position, Color.white), false); } else if (_selectedGroup != null) { mb.Add(0, new MeshBuilder.Rectangle(_selectedGroup.Position, Color.white * 0.8f), false); } m_SelectionMesh = mb.CreateMesh(); }
public void Add(Sprite s, Vector3 pos, Color c, bool flip = false) { if (s == null) { return; } InitMaterial(s.texture); sprite_pos.Add(pos); dirty = true; builder.Add(s, pos, c, flip); }
private void Draw(MeshBuilder mg) { mg.Rotate(state.dir); for (int i = 0; i < Cylinder.verticesToBeUntwisted.Count; i++) { mg.vertices[Cylinder.verticesToBeUntwisted[i]] = Quaternion.Inverse(twistQuaternion) * mg.vertices[Cylinder.verticesToBeUntwisted[i]]; } for (int i = 0; i < Cylinder.normalsToBeUntwisted.Count; i++) { mg.normals[Cylinder.normalsToBeUntwisted[i]] = Quaternion.Inverse(twistQuaternion) * mg.normals[Cylinder.normalsToBeUntwisted[i]]; } mg.Translate(state.pos); meshGenerator.Add(mg); }
private void RefreshMesh() { if (m_Mesh != null) { m_Mesh.CleanupMeshes(); } MeshBuilder mb = new MeshBuilder(); foreach (Group group in _groups.Values) { Rect r = group.Position; var color = group.Color; mb.Add(0, new MeshBuilder.Rectangle(r, color, color * 0.75f, color * 0.5f, color * 0.75f), true); } m_Mesh = mb.CreateMesh(); }
private void RefreshGroupMesh(Group group) { if (m_SelectionGroupMesh != null) { m_SelectionGroupMesh.CleanupMeshes(); } MeshBuilder mb = new MeshBuilder(); foreach (Item item in group.Items) { Rect r = item.Position; var color = item.Color; mb.Add(0, new MeshBuilder.Rectangle(r, color, color * 0.75f, color * 0.5f, color * 0.75f), true); } m_SelectionGroupMesh = mb.CreateMesh(); }
public void Load(string path) { var reader = new StreamReader(path); var positions = new List<Vector3>(); var norms = new List<Vector3>(); var texes = new List<Vector2>(); var objMaterial = new ObjMaterial(); var builderMap = new Dictionary<Material, MeshBuilder<VertexTNP3>>(); var material = Material.Default(); var builder = new MeshBuilder<VertexTNP3>(); builderMap[material] = builder; while (true) { var line = reader.ReadLine(); if (line == null) { break; } var parts = line.Split(' '); switch (parts[0]) { case "v": var v1 = Parse.Float(parts[1]); var v2 = Parse.Float(parts[2]); var v3 = Parse.Float(parts[3]); var vert = new Vector3(v1, v2, v3); positions.Add(vert); break; case "vn": var n1 = Parse.Float(parts[1]); var n2 = Parse.Float(parts[2]); var n3 = Parse.Float(parts[3]); var norm = new Vector3(n1, n2, n3); norms.Add(norm); break; case "vt": var t1 = Parse.Float(parts[1]); var t2 = Parse.Float(parts[2]); var tex = new Vector2(t1, t2); texes.Add(tex); break; case "f": var g1 = parts[1].Split('/'); var g2 = parts[2].Split('/'); var g3 = parts[3].Split('/'); var tri = new Triangle<VertexTNP3>(); if (g1[0] != "") tri.A.Position = positions[Parse.Int(g1[0]) - 1]; if (g1[1] != "") tri.A.TexCoord = texes[Parse.Int(g1[1]) - 1]; if (g1[2] != "") tri.A.Normal = norms[Parse.Int(g1[2]) - 1]; if (g2[0] != "") tri.B.Position = positions[Parse.Int(g2[0]) - 1]; if (g2[1] != "") tri.B.TexCoord = texes[Parse.Int(g2[1]) - 1]; if (g2[2] != "") tri.B.Normal = norms[Parse.Int(g2[2]) - 1]; if (g3[0] != "") tri.C.Position = positions[Parse.Int(g3[0]) - 1]; if (g3[1] != "") tri.C.TexCoord = texes[Parse.Int(g3[1]) - 1]; if (g3[2] != "") tri.C.Normal = norms[Parse.Int(g3[2]) - 1]; builder.Add(tri); break; case "mtllib": var dirname = System.IO.Path.GetDirectoryName(path); var mtlPath = Path.Combine(dirname, parts[1]); objMaterial.Load(mtlPath); break; case "usemtl": material = objMaterial.Lookup(parts[1]); if (!builderMap.TryGetValue(material, out builder)) { builder = new MeshBuilder<VertexTNP3>(); builderMap[material] = builder; } break; } } foreach (var pair in builderMap) { if (!pair.Value.IsEmpty) { MaterialGroup mg; mg.Material = pair.Key; mg.Mesh = pair.Value.ToMesh().Compile(); materialGroups.Add(mg); } } }
void makeQuads(WallCompiled wall, MeshBuilder<VertexTNP3> builder, int a, int b) { Quad<VertexTNP3> quad; var bottom = wall.Thickness * bottomLength; var mid = wall.Thickness * midLength; var top = wall.Thickness * topLength; Vector3 v1, v2, v3, v4, normal; Vector2 t1, t2, t3, t4; t1 = new Vector2(.5f, wall.TexesBegin1[a]); v1 = new Vector3(wall.Verts1[a].X, wall.Verts1[a].Y, bottom); t2 = new Vector2(.5f, wall.TexesEnd1[b]); v2 = new Vector3(wall.Verts1[b].X, wall.Verts1[b].Y, bottom); t3 = new Vector2(1f, wall.TexesBegin1[a]); v3 = new Vector3(wall.Verts1[a].X, wall.Verts1[a].Y, mid); t4 = new Vector2(1f, wall.TexesEnd1[b]); v4 = new Vector3(wall.Verts1[b].X, wall.Verts1[b].Y, mid); normal = Vector3.Cross(v3 - v1, v4 - v1); normal.Normalize(); quad.A.Normal = normal; quad.A.Position = v2; quad.A.TexCoord = t2; quad.B.Normal = normal; quad.B.Position = v1; quad.B.TexCoord = t1; quad.C.Normal = normal; quad.C.Position = v3; quad.C.TexCoord = t3; quad.D.Normal = normal; quad.D.Position = v4; quad.D.TexCoord = t4; builder.Add(quad); t1 = new Vector2(.5f, wall.TexesBegin4[a]); v1 = new Vector3(wall.Verts4[a].X, wall.Verts4[a].Y, bottom); t2 = new Vector2(.5f, wall.TexesEnd4[b]); v2 = new Vector3(wall.Verts4[b].X, wall.Verts4[b].Y, bottom); t3 = new Vector2(1f, wall.TexesBegin4[a]); v3 = new Vector3(wall.Verts4[a].X, wall.Verts4[a].Y, mid); t4 = new Vector2(1f, wall.TexesEnd4[b]); v4 = new Vector3(wall.Verts4[b].X, wall.Verts4[b].Y, mid); normal = Vector3.Cross(v1 - v3, v4 - v3); normal.Normalize(); quad.A.Normal = normal; quad.A.Position = v1; quad.A.TexCoord = t1; quad.B.Normal = normal; quad.B.Position = v2; quad.B.TexCoord = t2; quad.C.Normal = normal; quad.C.Position = v4; quad.C.TexCoord = t4; quad.D.Normal = normal; quad.D.Position = v3; quad.D.TexCoord = t3; builder.Add(quad); t1 = new Vector2(.5f, wall.TexesBegin2[a]); v1 = new Vector3(wall.Verts2[a].X, wall.Verts2[a].Y, top); t2 = new Vector2(.5f, wall.TexesEnd2[b]); v2 = new Vector3(wall.Verts2[b].X, wall.Verts2[b].Y, top); t3 = new Vector2(1f, wall.TexesBegin3[a]); v3 = new Vector3(wall.Verts3[a].X, wall.Verts3[a].Y, top); t4 = new Vector2(1f, wall.TexesEnd3[b]); v4 = new Vector3(wall.Verts3[b].X, wall.Verts3[b].Y, top); normal = Vector3.Cross(v3 - v1, v4 - v1); normal.Normalize(); quad.A.Normal = normal; quad.A.Position = v2; quad.A.TexCoord = t2; quad.B.Normal = normal; quad.B.Position = v1; quad.B.TexCoord = t1; quad.C.Normal = normal; quad.C.Position = v3; quad.C.TexCoord = t3; quad.D.Normal = normal; quad.D.Position = v4; quad.D.TexCoord = t4; builder.Add(quad); t1 = new Vector2(0f, wall.TexesBegin1[a]); v1 = new Vector3(wall.Verts1[a].X, wall.Verts1[a].Y, mid); t2 = new Vector2(0f, wall.TexesEnd1[b]); v2 = new Vector3(wall.Verts1[b].X, wall.Verts1[b].Y, mid); t3 = new Vector2(.5f, wall.TexesBegin2[a]); v3 = new Vector3(wall.Verts2[a].X, wall.Verts2[a].Y, top); t4 = new Vector2(.5f, wall.TexesEnd2[b]); v4 = new Vector3(wall.Verts2[b].X, wall.Verts2[b].Y, top); normal = Vector3.Cross(v3 - v1, v4 - v1); normal.Normalize(); quad.A.Normal = normal; quad.A.Position = v2; quad.A.TexCoord = t2; quad.B.Normal = normal; quad.B.Position = v1; quad.B.TexCoord = t1; quad.C.Normal = normal; quad.C.Position = v3; quad.C.TexCoord = t3; quad.D.Normal = normal; quad.D.Position = v4; quad.D.TexCoord = t4; builder.Add(quad); t1 = new Vector2(0f, wall.TexesBegin4[a]); v1 = new Vector3(wall.Verts4[a].X, wall.Verts4[a].Y, mid); t2 = new Vector2(0f, wall.TexesEnd4[b]); v2 = new Vector3(wall.Verts4[b].X, wall.Verts4[b].Y, mid); t3 = new Vector2(.5f, wall.TexesBegin3[a]); v3 = new Vector3(wall.Verts3[a].X, wall.Verts3[a].Y, top); t4 = new Vector2(.5f, wall.TexesEnd3[b]); v4 = new Vector3(wall.Verts3[b].X, wall.Verts3[b].Y, top); normal = Vector3.Cross(v1 - v3, v4 - v3); normal.Normalize(); quad.A.Normal = normal; quad.A.Position = v1; quad.A.TexCoord = t1; quad.B.Normal = normal; quad.B.Position = v2; quad.B.TexCoord = t2; quad.C.Normal = normal; quad.C.Position = v4; quad.C.TexCoord = t4; quad.D.Normal = normal; quad.D.Position = v3; quad.D.TexCoord = t3; builder.Add(quad); }