{"id":312,"date":"2007-04-18T11:28:55","date_gmt":"2007-04-18T11:28:55","guid":{"rendered":"http:\/\/www.gisdeveloper.co.kr\/?p=312"},"modified":"2017-01-29T13:23:49","modified_gmt":"2017-01-29T04:23:49","slug":"dip2ks-wpf-3d-%ec%9e%85%eb%ac%b8-33","status":"publish","type":"post","link":"http:\/\/www.gisdeveloper.co.kr\/?p=312","title":{"rendered":"Dip2K&#8217;s WPF 3D \uc785\ubb38 (3\/3)"},"content":{"rendered":"<p>\ud55c\ub54c 3D\uc758 \uaf43\uc744 \ubf51\uc73c\ub77c\uba74 Texture Mapping\uc774\uc600\ub2e4. \ubb3c\ub860 \ud55c\ub54c\ub2e4. \uc9c0\uae08 \ub2e4\uc2dc \ubf51\uc73c\ub77c\uba74 Shader\uac00 \ub418\uaca0\uc9c0\ub9cc&#8230; \uc5ec\ud558\ud2bc \uc624\ub298 \uc7a0\uc2dc WPF 3D \ucabd\uc73c\ub85c \ub208\uc744 \ub3cc\ub9ac\uba74\uc11c WPF 3D \uc785\ubb38\uc5d0\uc11c \ub2e4\uc18c \ubd80\uc871\ud588\ub358 \ubd80\ubd84\uc778, Texutre Mapping \ubd80\ubd84\uc744 \uc815\ub9ac\ud558\uae30\ub85c \ud558\uaca0\ub2e4.<\/p>\n<p>\uba3c\uc800 Texture Mapping\uc744 \ud558\uae30 \uc704\ud574\uc11c\ub294 Texture Mapping \uc88c\ud45c\uac00 \ud544\uc694\ud558\ub2e4. \uc774\uc804\uc5d0 \ud588\ub358 \ubd80\ubd84\uc740 Texture Mapping \uc88c\ud45c\ub97c \uc81c\uc678\ud55c Mesh\uc758 \uc815\uc810\uacfc \uc815\uc810 \uc778\ub371\uc2a4 \uadf8\ub9ac\uace0 \ubc95\uc120 \ubca1\ud130 \ub9cc\uc744 \uc9c0\uc815\ud558\uc600\ub2e4. \uc774\uc81c Texture Mapping \uc88c\ud45c\ub97c \uc9c0\uc815\ud574\ubcf4\ub294 \uac83\uc744 \uc0b4\ud3b4\ubcf4\uc790.<\/p>\n<p>\uc6b0\ub9ac\uac00 \uc9c0\uae08\uae4c\uc9c0 \uad6c\ucd95\ud574 \uc654\ub358 \uac83\uc5d0\uc11c \uc2dc\uc791\ud574\ubcf4\uc790. Mesh\uc758 \uc815\uc810\uacfc \uc778\ub371\uc2a4 \uadf8\ub9ac\uace0 \ubc95\uc120 \ubca1\ud130\ub97c \uc9c0\uc815\ud574 \uc8fc\ub294 \ubd80\ubd84\uc744 \ud3ec\ud568\ud558\ub294 \ud568\uc218\uac00 Windows1.xaml.cs \ud30c\uc77c \uc548\uc758 Window1 \ud074\ub798\uc2a4\uc5d0 \ub300\ud55c CreateTriangleModel \ud568\uc218\uc600\ub2e4. \uc774\uc81c \uc774\uac83\uc774 \uc544\ub798\uc640 \uac19\uc774 \ubc14\ub010\ub2e4. \ud30c\ub791\uc0c9\uc758 \ucf54\ub4dc \ubd80\ubd84\uc774 \ubcc0\uacbd\uc774\ub098 \ucd94\uac00\ub41c \ubd80\ubd84\uc774\ub2e4.<\/p>\n<pre>private GeometryModel3D CreateTriangleModel(Point3D p0, Point3D p1, \r\n    Point3D p2, Point p0t, Point p1t, Point p2t)\r\n{\r\n    MeshGeometry3D mesh = new MeshGeometry3D();\r\n            \r\n    mesh.Positions.Add(p0);\r\n    mesh.Positions.Add(p1);\r\n    mesh.Positions.Add(p2);\r\n\r\n    mesh.TriangleIndices.Add(0);\r\n    mesh.TriangleIndices.Add(1);\r\n    mesh.TriangleIndices.Add(2);\r\n\r\n    mesh.TextureCoordinates.Add(p0t);\r\n    mesh.TextureCoordinates.Add(p1t);\r\n    mesh.TextureCoordinates.Add(p2t);\r\n\r\n    Vector3D normal = CalculateNormal(p0, p1, p2);\r\n            \r\n    mesh.Normals.Add(normal);\r\n    mesh.Normals.Add(normal);\r\n    mesh.Normals.Add(normal);\r\n\r\n    BitmapImage bi = new BitmapImage();\r\n    bi.BeginInit();\r\n    bi.UriSource = new Uri(@\"y:\/face.PNG\", UriKind.RelativeOrAbsolute);\r\n    bi.EndInit();\r\n\r\n    Brush brush = new ImageBrush(bi);\r\n    Material material = new DiffuseMaterial(brush);\r\n    GeometryModel3D model = new GeometryModel3D(mesh, material);\r\n\r\n    return model;\r\n}<\/pre>\n<p>Texture Mapping \uc88c\ud45c\uc640 Texture Image\ub85c \uc0ac\uc6a9\ub420 \uadf8\ub9bc\uc744 \uc7ac\uc9c8(Material)\ub85c \uc9c0\uc815\ud558\uc600\ub2e4. &nbsp;CreateTriangleModel \ud568\uc218\uac00 \ubcc0\uacbd\ub418\uc5c8\uc73c\ub2c8 \uc774 \ud568\uc218\ub97c \uc0ac\uc6a9\ud558\ub294 \ubd80\ubd84\ub3c4 \ubcc0\uacbd\ub418\uc5b4\uc57c \ud558\uc9c0 \uc54a\uaca0\ub294\uac00? \uadf8 \ubd80\ubd84\uc5d0 \ub300\ud55c \ucf54\ub4dc\ub294 ClickCubeButton \ud568\uc218 \uc548\uc774\uba70 \ubcc0\uacbd\ub41c \ucf54\ub4dc\ub97c \ud30c\ub780\uc0c9\uc73c\ub85c \ub098\ud0c0\ub0b4\uba74 \ub2e4\uc74c\uacfc \uac19\ub2e4.<\/p>\n<pre>private void ClickCubeButton(object Sender, RoutedEventArgs e)\r\n{\r\n    if (model != null) return;\r\n\r\n    Model3DGroup cube = new Model3DGroup();\r\n\r\n    Point3D p0 = new Point3D(-1, -1, -1);\r\n    Point3D p1 = new Point3D(1, -1, -1);\r\n    Point3D p2 = new Point3D(1, -1, 1);\r\n    Point3D p3 = new Point3D(-1, -1, 1);\r\n    Point3D p4 = new Point3D(-1, 1, -1);\r\n    Point3D p5 = new Point3D(1, 1, -1);\r\n    Point3D p6 = new Point3D(1, 1, 1);\r\n    Point3D p7 = new Point3D(-1, 1, 1);\r\n\r\n    Point t00 = new Point(0, 0);\r\n    Point t01 = new Point(0, 1);\r\n    Point t10 = new Point(1, 0);\r\n    Point t11 = new Point(1, 1);<\/font><\/strong>\r\n\r\n    \/\/front side triangles\r\n    cube.Children.Add(CreateTriangleModel(p3, p2, p6<strong><font color=\"#0000ff\">, t00, t10, t11<\/font><\/strong>));\r\n    cube.Children.Add(CreateTriangleModel(p3, p6, p7<strong><font color=\"#0000ff\">, t00, t11, t01<\/font><\/strong>));\r\n\r\n    \/\/right side triangles\r\n    cube.Children.Add(CreateTriangleModel(p2, p1, p5<font color=\"#0000ff\">, t00, t10, t11<\/font>));\r\n    cube.Children.Add(CreateTriangleModel(p2, p5, p6<font color=\"#0000ff\"><strong>, t00, t11, t01<\/strong><\/font>));\r\n\r\n    \/\/back side triangles\r\n    cube.Children.Add(CreateTriangleModel(p1, p0, p4<strong><font color=\"#0000ff\">, t10, t00, t01<\/font><\/strong>));\r\n    cube.Children.Add(CreateTriangleModel(p1, p4, p5<strong><font color=\"#0000ff\">, t10, t01, t11<\/font><\/strong>));\r\n\r\n    \/\/left side triangles\r\n    cube.Children.Add(CreateTriangleModel(p0, p3, p7<strong><font color=\"#0000ff\">, t10, t00, t01<\/font><\/strong>));\r\n    cube.Children.Add(CreateTriangleModel(p0, p7, p4<strong><font color=\"#0000ff\">, t10, t01, t11<\/font><\/strong>));\r\n\r\n    \/\/top side triangles\r\n    cube.Children.Add(CreateTriangleModel(p7, p6, p5<strong><font color=\"#0000ff\">, t00, t10, t11<\/font><\/strong>));\r\n    cube.Children.Add(CreateTriangleModel(p7, p5, p4<font color=\"#0000ff\"><strong>, t00, t11, t01<\/strong><\/font>));\r\n\r\n    \/\/bottom side triangles\r\n    cube.Children.Add(CreateTriangleModel(p2, p3, p0<font color=\"#0000ff\"><strong>, t10, t00, t01<\/strong><\/font>));\r\n    cube.Children.Add(CreateTriangleModel(p2, p0, p1<strong><font color=\"#0000ff\">, t10, t01, t11<\/font><\/strong>));\r\n\r\n    model = new ModelVisual3D();\r\n    model.Content = cube;\r\n\r\n    mainViewport.Children.Add(model);\r\n}<\/pre>\n<p>Texture Mapping \uc88c\ud45c\uc5d0 \ub300\ud55c \uc124\uba85\uc740 \uc774\uacf3 OpenGL\uc758 Texture Mapping\uc5d0 \ub300\ud55c \uac15\uc88c\uc5d0 \ub3d9\uc77c\ud558\ub2c8 \uadf8\uacf3\uc744 \ucc38\uace0\ud558\uae38 \ubc14\ub780\ub2e4. \uadf8 \uc2e4\ud589 \uacb0\uacfc\ub294 \ub2e4\uc74c\uacfc \uac19\ub2e4.<br \/>\n<img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gisdeveloper.co.kr\/wp-content\/uploads\/1\/1005657694.png\" class=\"aligncenter\" width=\"325\" height=\"323\" alt=\"\" \/>\ucc38\uace0\ub85c \ud14d\uc2a4\uccd0 \uc774\ubbf8\uc9c0\uc758 \ud06c\uae30\ub294 \uacfc\uac70\uc758 2\uc758 \uc790\uc2b9\uc774\uc5ec\uc57c \ud55c\ub2e4\ub294 \uc81c\uc57d\uc774 \ub354 \uc774\uc0c1 \uc801\uc6a9\ud558\uc9c0 \uc54a\uc73c\uba70 \ub3d9\uc601\uc0c1(AVI, \ub3d9\uc601\uc0c1 GIF \ub4f1)\ub3c4 \uc27d\uac8c \uc9c0\uc6d0\ud558\uba70 \uc774\ubbf8\uc9c0\uc758 \uacbd\ub85c\ub97c http \ud504\ub85c\ud1a0\ucf5c\uc744 \ud1b5\ud574\uc11c\ub3c4 \uc27d\uac8c \ubc1b\uc544\ub4e4\uc77c \uc218 \uc788\ub2e4. <\/p>\n<p>\uc774\uc0c1\uc73c\ub85c WPF\ub97c \uc774\uc6a9\ud55c \uac04\ub2e8\ud55c 3D \uadf8\ub798\ud53d\uc5d0 \ub300\ud55c \uae00\uc758 \uc815\ub9ac\ub97c \ub05d\ub0b4\uaca0\ub2e4. \ucd94\ud6c4\uc5d0 \uc9c0\uc18d\uc801\uc73c\ub85c WPF\uc5d0 \ub300\ud55c Article\uc744 \uc2e4\uc81c \uc5c5\ubb34\uc5d0 \uc801\uc6a9\ud558\uba74\uc11c \uc815\ub9ac\ud558\ub294 \uc608\uac00 \ub9ce\uc544\uc9c0\uae38 \uc2a4\uc2a4\ub85c\uc5d0\uac8c \uae30\ub300\ud55c\ub2e4.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\ud55c\ub54c 3D\uc758 \uaf43\uc744 \ubf51\uc73c\ub77c\uba74 Texture Mapping\uc774\uc600\ub2e4. \ubb3c\ub860 \ud55c\ub54c\ub2e4. \uc9c0\uae08 \ub2e4\uc2dc \ubf51\uc73c\ub77c\uba74 Shader\uac00 \ub418\uaca0\uc9c0\ub9cc&#8230; \uc5ec\ud558\ud2bc \uc624\ub298 \uc7a0\uc2dc WPF 3D \ucabd\uc73c\ub85c \ub208\uc744 \ub3cc\ub9ac\uba74\uc11c WPF 3D \uc785\ubb38\uc5d0\uc11c \ub2e4\uc18c \ubd80\uc871\ud588\ub358 \ubd80\ubd84\uc778, Texutre Mapping \ubd80\ubd84\uc744 \uc815\ub9ac\ud558\uae30\ub85c \ud558\uaca0\ub2e4. \uba3c\uc800 Texture Mapping\uc744 \ud558\uae30 \uc704\ud574\uc11c\ub294 Texture Mapping \uc88c\ud45c\uac00 \ud544\uc694\ud558\ub2e4. \uc774\uc804\uc5d0 \ud588\ub358 \ubd80\ubd84\uc740 Texture Mapping \uc88c\ud45c\ub97c \uc81c\uc678\ud55c Mesh\uc758 \uc815\uc810\uacfc \uc815\uc810 \uc778\ub371\uc2a4 \uadf8\ub9ac\uace0 \ubc95\uc120 \ubca1\ud130 &hellip; <\/p>\n<p class=\"link-more\"><a href=\"http:\/\/www.gisdeveloper.co.kr\/?p=312\" class=\"more-link\">\ub354 \ubcf4\uae30<span class=\"screen-reader-text\"> &#8220;Dip2K&#8217;s WPF 3D \uc785\ubb38 (3\/3)&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[20],"tags":[19],"class_list":["post-312","post","type-post","status-publish","format-standard","hentry","category-wpf","tag-wpf-3d"],"_links":{"self":[{"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/posts\/312","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=312"}],"version-history":[{"count":1,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/posts\/312\/revisions"}],"predecessor-version":[{"id":3642,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/posts\/312\/revisions\/3642"}],"wp:attachment":[{"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=312"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=312"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=312"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}