private void UpdateAxisColor(Geometry3D mesh, int which, Color4 color) { switch (which) { case 0: axisBillboards[which].Geometry = new BillboardSingleText3D() { TextInfo = new TextInfo("X", new Vector3(14, 0, 0)), BackgroundColor = Color.Transparent, FontSize = 14, FontColor = color }; break; case 1: axisBillboards[which].Geometry = new BillboardSingleText3D() { TextInfo = new TextInfo("Y", new Vector3(0, 14, 0)), BackgroundColor = Color.Transparent, FontSize = 14, FontColor = color }; break; case 2: axisBillboards[which].Geometry = new BillboardSingleText3D() { TextInfo = new TextInfo("Z", new Vector3(0, 0, 14)), BackgroundColor = Color.Transparent, FontSize = 14, FontColor = color }; break; } int segment = mesh.Positions.Count / 3; var colors = new Core.Color4Collection(mesh.Colors == null ? Enumerable.Repeat <Color4>(Color.Black, mesh.Positions.Count) : mesh.Colors); for (int i = segment * which; i < segment * (which + 1); ++i) { colors[i] = color; } mesh.Colors = colors; }
public CameraModel3D() { var b1 = new MeshBuilder(); b1.AddBox(new Vector3(), 1f, 1f, 1.2f, BoxFaces.All); var body = new MeshGeometryModel3D() { CullMode = CullMode.Back }; body.Geometry = b1.ToMeshGeometry3D(); body.Material = PhongMaterials.Gray; body.SceneNode.OnSetRenderTechnique = (h) => { return(h.EffectsManager[DefaultRenderTechniqueNames.Diffuse]); }; this.Children.Add(body); b1 = new MeshBuilder(); b1.AddCone(new Vector3(0, 0, -1.2f), new Vector3(0, 0f, 0), 0.4f, true, 12); var lens = new MeshGeometryModel3D() { CullMode = CullMode.Back }; lens.Geometry = b1.ToMeshGeometry3D(); lens.Material = PhongMaterials.Yellow; lens.SceneNode.OnSetRenderTechnique = (h) => { return(h.EffectsManager[DefaultRenderTechniqueNames.Diffuse]); }; this.Children.Add(lens); var builder = new LineBuilder(); builder.AddLine(Vector3.Zero, new Vector3(2, 0, 0)); builder.AddLine(Vector3.Zero, new Vector3(0, 2, 0)); builder.AddLine(Vector3.Zero, new Vector3(0, 0, -2)); var mesh = builder.ToLineGeometry3D(); var arrowMeshModel = new LineGeometryModel3D(); arrowMeshModel.Geometry = mesh; arrowMeshModel.Color = System.Windows.Media.Colors.White; arrowMeshModel.IsHitTestVisible = false; int segment = mesh.Positions.Count / 3; var colors = new Core.Color4Collection(Enumerable.Repeat <Color4>(Color.Black, mesh.Positions.Count)); int i = 0; for (; i < segment; ++i) { colors[i] = Color.Red; } for (; i < segment * 2; ++i) { colors[i] = Color.Green; } for (; i < segment * 3; ++i) { colors[i] = Color.Blue; } mesh.Colors = colors; this.Children.Add(arrowMeshModel); SceneNode.OnTransformChanged += SceneNode_OnTransformChanged; }
public static Color4Collection Parse(string source) { IFormatProvider formatProvider = CultureInfo.InvariantCulture; var th = new TokenizerHelper(source, formatProvider); var resource = new Color4Collection(); Color4 value; while (th.NextToken()) { value = new Color4( Convert.ToSingle(th.GetCurrentToken(), formatProvider), Convert.ToSingle(th.NextTokenRequired(), formatProvider), Convert.ToSingle(th.NextTokenRequired(), formatProvider), Convert.ToSingle(th.NextTokenRequired(), formatProvider)); resource.Add(value); } return(resource); }