■ 코드로 삼각형을 3D로 만드는 방법을 보여준다.
▶ MainWindow.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 |
using System.Windows; using System.Windows.Controls; using System.Windows.Controls.Primitives; using System.Windows.Media; using System.Windows.Media.Media3D; namespace TestProject { /// <summary> /// 메인 윈도우 /// </summary> public partial class MainWindow : Window { //////////////////////////////////////////////////////////////////////////////////////////////////// Field ////////////////////////////////////////////////////////////////////////////////////////// Private #region Field /// <summary> /// 투시도법 카메라 /// </summary> private PerspectiveCamera perspectiveCamera; #endregion //////////////////////////////////////////////////////////////////////////////////////////////////// Constructor ////////////////////////////////////////////////////////////////////////////////////////// Public #region 생성자 - MainWindow() /// <summary> /// 생성자 /// </summary> public MainWindow() { InitializeComponent(); #region 스크롤바를 설정합니다. ScrollBar scrollBar = new ScrollBar(); scrollBar.Orientation = Orientation.Horizontal; scrollBar.Value = -2; scrollBar.Minimum = -2; scrollBar.Maximum = 2; scrollBar.ValueChanged += scrollBar_ValueChanged; #endregion #region 삼각형 MeshGeometry3D를 설정합니다. MeshGeometry3D triangleMeshGeometry3D = new MeshGeometry3D(); triangleMeshGeometry3D.Positions.Add(new Point3D(0, 0, 0)); triangleMeshGeometry3D.Positions.Add(new Point3D(0, 1, -1)); triangleMeshGeometry3D.Positions.Add(new Point3D(0, 0, -2)); triangleMeshGeometry3D.TriangleIndices = new Int32Collection(new int[] { 0, 1, 2 }); #endregion #region 삼각형 GeometryModel3D를 설정합니다. GeometryModel3D triangleGeometryModel3D = new GeometryModel3D(); triangleGeometryModel3D.Geometry = triangleMeshGeometry3D; triangleGeometryModel3D.Material = new DiffuseMaterial(Brushes.Blue); triangleGeometryModel3D.BackMaterial = new DiffuseMaterial(Brushes.Red ); #endregion #region 삼각형 ModelVisual3D를 설정합니다. ModelVisual3D triangleModelVisual3D = new ModelVisual3D(); triangleModelVisual3D.Content = triangleGeometryModel3D; #endregion #region 환경광을 설정합니다. AmbientLight ambientLight = new AmbientLight(Colors.White); #endregion #region 환경광 ModelVisual3D를 설정합니다. ModelVisual3D lightModelVisual3D = new ModelVisual3D(); lightModelVisual3D.Content = ambientLight; #endregion #region 투시도법 카메라를 설정합니다. this.perspectiveCamera = new PerspectiveCamera(new Point3D(-2, 0, 5), new Vector3D(0, 0, -1), new Vector3D(0, 1, 0), 45); #endregion #region Viewport3D를 설정합니다. Viewport3D viewport3D = new Viewport3D(); viewport3D.Camera = this.perspectiveCamera; viewport3D.Children.Add(triangleModelVisual3D); viewport3D.Children.Add(lightModelVisual3D); #endregion #region 도킹 패널을 설정합니다. DockPanel dockPanel = new DockPanel(); dockPanel.Children.Add(scrollBar); DockPanel.SetDock(scrollBar, Dock.Bottom); dockPanel.Children.Add(viewport3D); Content = dockPanel; #endregion } #endregion //////////////////////////////////////////////////////////////////////////////////////////////////// Method ////////////////////////////////////////////////////////////////////////////////////////// Private #region 스크롤바 값 변경시 처리하기 - scrollBar_ValueChanged(sender, e) /// <summary> /// 스크롤바 값 변경시 처리하기 /// </summary> /// <param name="sender">이벤트 발생자</param> /// <param name="e">이벤트 인자</param> private void scrollBar_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e) { this.perspectiveCamera.Position = new Point3D(e.NewValue, 0, 5); } #endregion } } |