/// <summary> /// Create a MeshGeometryVisual3D from an existing HalfEdgeMesh with specified Colors. /// </summary> /// <param name="mesh">The existing HalfEdgeMesh.</param> /// <param name="foreground">The Color for the Triangles of the Mesh.</param> /// <param name="backGround">The Background Color for the Triangles of the Mesh.</param> /// <returns>MeshVisual3D of the HalfEdgeMesh with the specified Materials.</returns> private static MeshVisual3D CreateVisual3DWithoutNormals(this HalfEdgeMesh mesh, Material frontMaterial, Material backMaterial) { if (frontMaterial == default(Material)) { frontMaterial = new DiffuseMaterial(new SolidColorBrush(DefaultForegroundColor)); } if (backMaterial == default(Material)) { backMaterial = new DiffuseMaterial(new SolidColorBrush(DefaultBackgroundColor)); } var mesh3D = new Mesh3D(mesh.Vertices.Select(p => new Point3D(p.X, p.Y, p.Z)), mesh.Triangles.Where(t => t.HalfEdge != null).SelectMany(t => t.VertexIndizes)); var meshVisual = new MeshVisual3D() { Mesh = mesh3D, FaceMaterial = frontMaterial, FaceBackMaterial = backMaterial, EdgeDiameter = 0, VertexRadius = 0 }; return(meshVisual); }
/// <summary> /// Creates a rather ugly visual representatino of the polyline. /// Fixed in size with respect to the model. /// </summary> /// <param name="highlighted">The destination visual component to replace the content of.</param> internal void SetToVisual(MeshVisual3D highlighted) { if (_geomPoints == null) { return; } var lines = new LinesVisual3D { Color = Colors.Yellow }; var axesMeshBuilder = new MeshBuilder(); List <Point3D> path = new List <Point3D>(); foreach (var item in _geomPoints) { axesMeshBuilder.AddSphere(item.Point, 0.1); path.Add(item.Point); } if (_geomPoints.Count > 1) { double lineThickness = 0.05; axesMeshBuilder.AddTube(path, lineThickness, 9, false); } highlighted.Content = new GeometryModel3D(axesMeshBuilder.ToMesh(), Materials.Yellow); }
public override ModelVisual3D To3DViz() { MeshBuilder builder = new MeshBuilder(true, true); for (int i = 0; i < connectivity.Count; i++) { List <int> l = connectivity[i]; //builder.AddPolygon(l.Select(idx => pnts[idx].ToPoint3D()).ToList()); if (l.Count == 3) { builder.AddTriangle(pnts[l[0]].ToPoint3D(), pnts[l[1]].ToPoint3D(), pnts[l[2]].ToPoint3D()); } else if (l.Count == 4) { builder.AddQuad(pnts[l[0]].ToPoint3D(), pnts[l[1]].ToPoint3D(), pnts[l[2]].ToPoint3D(), pnts[l[3]].ToPoint3D()); } } Mesh3D m = new Mesh3D(builder.Positions, builder.TriangleIndices); MeshVisual3D mesh = new MeshVisual3D() { Mesh = m }; return(mesh); }
MeshVisual3D MakeMeshVisual3D(Mesh3D mesh) { MeshVisual3D vismesh = new MeshVisual3D { Content = new GeometryModel3D { Geometry = mesh.ToMeshGeometry3D(), Material = Materials.White } }; return(vismesh); }
public RenderLocalPlayer(HelixViewport3D viewport, TextBlock playerLocationText, TextBlock cameraPositionText, TextBlock cameraLookDirectionText) : base(viewport) { MeshBuilder mb = new MeshBuilder(); mb.AddSphere(new Point3D(), 1.5); _model = new GeometryModel3D(mb.ToMesh(true), Materials.Red); Visual = new MeshVisual3D { Content = _model }; _playerLocationText = playerLocationText; _cameraPositionText = cameraPositionText; _cameraLookDirectionText = cameraLookDirectionText; }
static void UpdateColor(Visual3D v3d, bool isClicked) { DiffuseMaterial material = isClicked ? PropertyServer.SelectedMaterial : PropertyServer.UnSelectedMaterial; DiffuseMaterial materialBack = isClicked ? PropertyServer.SelectedMaterialBack : PropertyServer.UnSelectedMaterialBack; System.Windows.Media.Color color = isClicked ? PropertyServer.SelectedColor : PropertyServer.UnSelectedColor; if (v3d is MeshVisual3D) { MeshVisual3D mesh = v3d as MeshVisual3D; mesh.FaceMaterial = material; mesh.FaceBackMaterial = materialBack; mesh.EdgeMaterial = material; mesh.VertexMaterial = material; } else if (v3d is LinesVisual3D) { LinesVisual3D line = v3d as LinesVisual3D; line.Color = color; } else if (v3d is PointsVisual3D) { PointsVisual3D pnts = v3d as PointsVisual3D; pnts.Color = color; } else if (v3d is SphereVisual3D) { SphereVisual3D sphere = v3d as SphereVisual3D; sphere.Material = material; } else { Logger.Log(v3d, "NOTYPE"); } }
public RenderMesh(HelixViewport3D viewport) : base(viewport) { Visual = new MeshVisual3D(); }
void AddFakeVariablesDebug() { dg_Variables.BeginningEdit -= dg_Variables_BeginningEdit; dg_Variables.BeginningEdit += dg_Variables_BeginningEdit_DEBUG; // datagrid objs DataGridObject obj = new DataGridObject() { Name = "Points" }; DataGridObject sphere = new DataGridObject() { Name = "Sphere" }; DataGridObject mesh = new DataGridObject() { Name = "Mesh" }; DataGridObject line = new DataGridObject() { Name = "Line" }; List <DataGridObject> objs = new List <DataGridObject>() { obj, sphere, line, mesh }; dg_Variables.ItemsSource = objs; // pnts PointsVisual3D points = new PointsVisual3D(); Random rand = new Random(); for (int i = 0; i < 10; i++) { Point3D p = new Point3D(rand.NextDouble(), rand.NextDouble(), rand.NextDouble()); points.Points.Add(p); } points.Size = PropertyServer.PointSize; _dict.Add("Points", points); hv.Items.Add(points); // sphere SphereVisual3D sph = new SphereVisual3D() { Center = new Point3D(0, 0, 0), Radius = 0.1, }; _dict.Add("Sphere", sph); hv.Items.Add(sph); // mesh MeshBuilder builder = new MeshBuilder(true, true); builder.AddTriangle(new Point3D(1, 1, 1), new Point3D(2, 2, 4), new Point3D(5, 3, 3)); MeshVisual3D m = new MeshVisual3D() { Mesh = new Mesh3D(builder.Positions, Enumerable.Range(0, builder.Positions.Count)) }; _dict.Add("Mesh", m); hv.Items.Add(m); // line LinesVisual3D l = new LinesVisual3D(); l.Points.Add(new Point3D(4, 5, 7)); l.Points.Add(new Point3D(4, 8, 5)); _dict.Add("Line", l); hv.Items.Add(l); }
public MainWindow() { InitializeComponent(); string[] args = Environment.GetCommandLineArgs(); BrgFile file; if (args.Length > 1 && false) { file = new BrgFile(File.Open(args[1], FileMode.Open, FileAccess.Read, FileShare.Read)); file.WriteJson(File.Open(args[1] + ".json", FileMode.Create, FileAccess.Write, FileShare.Read)); if (args.Length > 2 && args[2] == "-s") { Application.Current.Shutdown(); } } else { //archer e slinger_attacka.brg file = new BrgFile(File.Open(@"C:\Games\Steam\steamapps\common\Age of Mythology\models\version2.0\infantry g hoplite head standard.brg", FileMode.Open, FileAccess.Read, FileShare.Write)); file.WriteJson(File.Open("infantry g hoplite head standard.brg.json.brg", FileMode.Create, FileAccess.Write, FileShare.Read)); var grnFile = new AoMEngineLibrary.Graphics.Grn.GrnFile(); grnFile.Read(File.Open(@"C:\Games\Steam\steamapps\common\Age of Mythology\models\version2.0\ajax.grn", FileMode.Open, FileAccess.Read, FileShare.Write)); } //BrgFile t = new BrgFile(); //t.ReadJson(File.Open("hi.brg", FileMode.Open, FileAccess.Read, FileShare.Read)); //t.WriteJson(File.Open("hi2.brg", FileMode.Create, FileAccess.Write, FileShare.Read)); List <Point3D> positions = new List <Point3D>(file.Meshes[0].Vertices.Count); List <int> triangleIndices = new List <int>(file.Meshes[0].Faces.Count * 3); for (int i = 0; i < file.Meshes[0].Vertices.Count; ++i) { positions.Add(new Point3D( file.Meshes[0].Vertices[i].X, file.Meshes[0].Vertices[i].Y, file.Meshes[0].Vertices[i].Z)); } for (int i = 0; i < file.Meshes[0].Faces.Count; ++i) { triangleIndices.Add(file.Meshes[0].Faces[i].Indices[0]); triangleIndices.Add(file.Meshes[0].Faces[i].Indices[1]); triangleIndices.Add(file.Meshes[0].Faces[i].Indices[2]); } Mesh3D mesh = new Mesh3D(positions, triangleIndices); MeshVisual3D meshVis = new MeshVisual3D(); meshVis.Mesh = mesh; ModelVisual3D modVis = new ModelVisual3D(); GeometryModel3D geomod = new GeometryModel3D(); MeshGeometry3D meshgeo = new MeshGeometry3D(); //modVis.Transform = new MatrixTransform3D(new Matrix3D(-1, 0, 0, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1)); //modVis.Transform = new MatrixTransform3D(new Matrix3D(-0, -0, -1, 0, -1, -0, -0, 0, 0, 1, 0, 0, 0, 0, 0, 1)); modVis.Transform = new MatrixTransform3D(new Matrix3D(0, -1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1)); meshgeo.Positions = new Point3DCollection(positions); meshgeo.TriangleIndices = new Int32Collection(triangleIndices); geomod.Geometry = meshgeo; modVis.Content = geomod; MaterialGroup matGroup = new MaterialGroup(); matGroup.Children.Add(new DiffuseMaterial(new SolidColorBrush(Color.FromArgb(255, 0xFF, 0x00, 0xFF)))); geomod.Material = matGroup; //viewport3d.Children.Add(meshVis); viewport3d.Children.Add(modVis); file = new BrgFile(File.Open(@"C:\Games\Steam\steamapps\common\Age of Mythology\models\version2.0\animal aurochs_attacka.brg", FileMode.Open, FileAccess.Read)); glTFLoader.Schema.Gltf gltf; using (var stream = File.Open("dataBuffer.bin", FileMode.Create, FileAccess.Write, FileShare.Read)) { GltfFormatter frmt = new GltfFormatter(); gltf = frmt.FromBrg(file, stream); } glTFLoader.Interface.SaveModel(gltf, "brgGltf.gltf"); }
void CompositionTarget_Rendering(object sender, EventArgs e) { if (_isRendering) { return; } if (!_requiresRedraw) { return; } _isRendering = true; Points = null; Lines = null; _lines.Points = null; _points.Points = null; Points = new Point3DCollection(); Lines = new Point3DCollection(); Meshes = new List <Mesh3D>(); // a list of all the upstream IDrawable nodes List <IDrawable> drawables = new List <IDrawable>(); GetUpstreamIDrawable(drawables, Inputs); foreach (IDrawable d in drawables) { d.Draw(); foreach (Point3D p in d.RenderDescription.points) { Points.Add(p); } foreach (Point3D p in d.RenderDescription.lines) { Lines.Add(p); } foreach (Mesh3D mesh in d.RenderDescription.meshes) { Meshes.Add(mesh); } } _lines.Points = Lines; _points.Points = Points; // remove old meshes from the renderer foreach (MeshVisual3D mesh in _meshes) { _watchView.watch_view.Children.Remove(mesh); } _meshes.Clear(); foreach (Mesh3D mesh in Meshes) { MeshVisual3D vismesh = MakeMeshVisual3D(mesh); _watchView.watch_view.Children.Add(vismesh); _meshes.Add(vismesh); } _requiresRedraw = false; _isRendering = false; }