{"id":348,"date":"2013-06-20T07:59:07","date_gmt":"2013-06-20T07:59:07","guid":{"rendered":"http:\/\/yoonhada.com\/wp\/?p=348"},"modified":"2013-06-20T07:59:07","modified_gmt":"2013-06-20T07:59:07","slug":"mfc-%eb%a5%bc-%ec%9d%b4%ec%9a%a9%ed%95%9c-direct3d-%ed%94%84%eb%a1%9c%ea%b7%b8%eb%9e%98%eb%b0%8d","status":"publish","type":"post","link":"http:\/\/yoonhada.com\/?p=348","title":{"rendered":"MFC \ub97c \uc774\uc6a9\ud55c Direct3D \ud504\ub85c\uadf8\ub798\ubc0d"},"content":{"rendered":"<p>\t\t\t\t<a href=\"http:\/\/viper.pe.kr\/cgi-bin\/moin.cgi\/MFC_%EB%A5%BC_%EC%9D%B4%EC%9A%A9%ED%95%9C_Direct3D_%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D?highlight=%28%5EMFC..%2A%29\">http:\/\/viper.pe.kr<\/a><\/p>\n<h2>1. \uc18c\uac1c<\/h2>\n<p>Direct3D \ub294 \uac8c\uc784\uc5d0\uc11c \uc8fc\ub85c \ub9ce\uc774 \uc0ac\uc6a9\ub418\uace0 \uc788\uc73c\uba70 MFC \ub294 \uc751\uc6a9 \ud504\ub85c\uadf8\ub7a8 \uac1c\ubc1c\uc5d0 \ub9ce\uc774 \uc0ac\uc6a9\ub418\uace0 \uc788\ub2e4. \uc774\ub807\uac8c \uc0ac\uc6a9 \ubaa9\uc801\uc774 \uc804\ud600 \ub2e4\ub978 \ub450 \uac00\uc9c0\ub97c \uac8c\uc784 \uac1c\ubc1c\uc5d0 \uc774\uc6a9\ud558\ub294 \uac83\uc740 \ubd80\uc801\ud569\ud558\ub2e4. \ud558\uc9c0\ub9cc \uac8c\uc784 \uc790\uccb4\ub97c \uac1c\ubc1c\ud558\ub294 \uac83\uc5d0\ub294 \ubd80\uc801\ud569\ud560\uc9c0 \ubaa8\ub974\ub098 \uac1c\ubc1c\uc5d0 \ud544\uc694\ud55c \ubcf4\uc870 \ud504\ub85c\uadf8\ub7a8\uc744 \uac1c\ubc1c\ud558\ub294\ub370\ub294 \uac00\uc7a5 \uc801\ud569\ud558\uc9c0 \uc54a\uc744\uae4c?<\/p>\n<p>\uc544\uc9c1\ub3c4 \ub9ce\uc740 \uc0ac\ub78c\ub4e4\uc740 MFC \ub294 \ub369\uce58\uac00 \ud06c\uace0 \ub290\ub9ac\ub2e4\uace0 \ud55c\ub2e4. \uadf8\ub7ec\ub098 \uadf8\uac83\uc740 \ud39c\ud2f0\uc5c4 100MHz \ub97c \uc0ac\uc6a9\ud558\ub358 \uacfc\uac70\uc758 \uc774\uc57c\uae30\uc77c\ubfd0, \uc9c0\uae08\uacfc \uac19\uc774 \uac70\uc758 \ubaa8\ub4e0 CPU \uac00 GHz \ub97c \ub118\uc5b4\uac00\ub294 \uacbd\uc6b0\uc5d4 \uc804\ud600 \ub2e4\ub974\ub2e4. \uba54\ubaa8\ub9ac\ub098 \uc800\uc7a5\ub9e4\uccb4 \ub610\ud55c GByte \ub2e8\uc704\ub97c \ub118\uc5b4\uac00\uace0 \uc788\ub294 \ud604\uc2dc\uc810\uc5d0\uc11c \uc804\ud600 \uc601\ud5a5\uc744 \uc904 \uc218 \uc5c6\ub294 \uac83\ub4e4\uc774\ub2e4. \uadf8\ub9ac\uace0 WINAPI \ubcf4\ub2e4 \ud3b8\ub9ac\ud55c \uc778\ud130\ud398\uc774\uc2a4\uc640 \ud504\ub808\uc784\uc6cc\ud06c\ub97c \uc81c\uacf5\ud558\uace0 \uc788\uc73c\ubbc0\ub85c \ud504\ub85c\uadf8\ub798\ubc0d \uc18d\ub3c4 \ub610\ud55c \ube60\ub974\ub2e4.<\/p>\n<p><strong>MFC \ub97c \uc774\uc6a9\ud55c Direct3D \ud504\ub85c\uadf8\ub798\ubc0d\uc740 \uac8c\uc784 \ud504\ub85c\uadf8\ub7a8 \ubcf4\ub2e4\ub294 \ubcf4\uc870 \ud504\ub85c\uadf8\ub7a8\uc744 \uac1c\ubc1c\ud558\ub294 \uac83\uc774 \ubaa9\uc801\uc774\ub2e4. \uadf8\ub9ac\uace0 Direct3D \ud504\ub85c\uadf8\ub798\ubc0d\uc744 \ucc98\uc74c \uc2dc\uc791\ud560 \ub54c\ub3c4 \uc720\uc6a9\ud558\ub2e4. \uc6b0\uc120 Direct3D \ub97c \uad6c\ub3d9\ud558\uae30 \uc704\ud55c \ud504\ub808\uc784\uc6cc\ud06c \uac1c\ubc1c\uc774 \ud544\uc694 \uc5c6\uc73c\uba70 \uc5ec\ub7ec\uac00\uc9c0 \ub370\uc774\ud130\ub97c \uc785\ub825\ud558\uac70\ub098 \ud14c\uc2a4\ud2b8\ud560 \uacbd\uc6b0\uc5d0\ub294 \uc190\uc27d\uac8c \uc778\ud130\ud398\uc774\uc2a4\ub97c \ub9cc\ub4e4\uace0 \uc218\uc815\ud560 \uc218 \uc788\ub2e4. MFC \ub97c \uc774\uc6a9\ud55c Direct3D \ud504\ub85c\uadf8\ub798\ubc0d\ub97c \uc2dc\uc791\ud558\uac8c \ub41c \uc774\uc720\ub3c4 \ud3b8\ub9ac\ud55c \uc778\ud130\ud398\uc774\uc2a4 \ud504\ub85c\uadf8\ub798\ubc0d \ub54c\ubb38\uc774\ub2e4.<\/strong><\/p>\n<p>\ucc38\uace0\ub85c\u00a0<strong>Microsoft Visual Studio 2005<\/strong>\u00a0\ub97c \uae30\uc900\uc73c\ub85c \uc815\ub9ac\ud55c\ub2e4.<\/p>\n<h2 id=\"head-1bf86636e23f97dee0c5c0945b0dd8ecd5db55e9\">2. \ucc38\uace0\ub3c4\uc11c<\/h2>\n<ul>\n<li>IT EXPERT : 3D \uac8c\uc784 \ud504\ub85c\uadf8\ub798\ubc0d\n<ul>\n<li>\uae40\uc6a9\uc900 \uc800, \ud55c\ube5b \ubbf8\ub514\uc5b4<\/li>\n<li>ISBN:\u00a0<a title=\"ISBNKOy\" href=\"http:\/\/www.yes24.com\/searchCenter\/searchDetailResult.aspx?qisbn=8979142536\">8979142536<\/a><\/li>\n<li>Direct3D \uc758 Framework \uc5d0 \ub300\ud558\uc5ec \uac04\ub7b5\ud788 \uc18c\uac1c\ud558\uace0 \uc788\uc74c ( p.142 ~ 158 )<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2 id=\"head-6dd75e357a81810a6313debd52795be11bddf867\">3. \ucc38\uace0\ub9c1\ud06c<\/h2>\n<ul>\n<li><a href=\"http:\/\/www.gamedev.net\/reference\/articles\/article1778.asp\">http:\/\/www.gamedev.net\/reference\/articles\/article1778.asp<\/a>\n<ul>\n<li>Integrating Direct3D 8.1 With MFC Using Visual Studio 6.0<\/li>\n<\/ul>\n<\/li>\n<li><a href=\"http:\/\/www.moon-labs.com\/resources\/IntegratingDirect3D9.0WithMFC.pdf\">http:\/\/www.moon-labs.com\/resources\/IntegratingDirect3D9.0WithMFC.pdf<\/a>\n<ul>\n<li>Integrating Direct3D 9.0 with MFC Using Visual Studio .Net (7.0)<\/li>\n<\/ul>\n<\/li>\n<li><a href=\"http:\/\/www.codeproject.com\/opengl\/windowopengl2.asp\">http:\/\/www.codeproject.com\/opengl\/windowopengl2.asp<\/a>\n<ul>\n<li>How to draw OpenGL to a window you created in a dialog box with the resource editor<\/li>\n<\/ul>\n<\/li>\n<li><a href=\"http:\/\/www.gamedev.net\/reference\/articles\/article1358.asp\">http:\/\/www.gamedev.net\/reference\/articles\/article1358.asp<\/a>\n<ul>\n<li>Creating 3D Tools with MFC<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2 id=\"head-df9c8211054872ac8889f15aae8c1068505e61de\">4.\u00a0<strong>MFC \ud504\ub85c\uc81d\ud2b8 \ub9cc\ub4e4\uae30<\/strong><\/h2>\n<p><strong>MFC \ud504\ub808\uc784\uc6cc\ud06c\ub294 \ub2e4\uc591\ud55c \ud615\ud0dc\ub97c \uc81c\uacf5\ud55c\ub2e4. \uae30\ubcf8\uc801\uc73c\ub85c\ub294 \ub2e4\uc911 \ubb38\uc11c (MDI) \uc640 \ubb38\uc11c\/\ubdf0 (Doc\/View) \uad6c\uc870\uac00 \uc120\ud0dd\ub418\uc5b4 \uc788\uc9c0\ub9cc, Direct3D \ud504\ub85c\uadf8\ub798\ubc0d\uc5d0\uc11c\ub294\u00a0<\/strong><strong>\ub2e8\uc77c \ubb38\uc11c (SDI)<\/strong>\uad6c\uc870\ub97c \uc0ac\uc6a9\ud560 \uac83\uc774\ub2e4. \uadf8\ub9ac\uace0 \ubb38\uc11c\/\ubdf0 (Doc\/View) \uad6c\uc870\ub294 \ubd88\ud544\uc694\ud558\uae30 \ub54c\ubb38\uc5d0\u00a0<strong>\ub2e8\uc77c \ubdf0<\/strong>\u00a0\uad6c\uc870\ub9cc \uc0ac\uc6a9\ud55c\ub2e4. \ubb38\uc11c\/\ubdf0 \uad6c\uc870\ub97c \uc0ac\uc6a9\ud558\uace0 \uc2f6\ub2e4\uba74\u00a0<strong>\ucc38\uace0\ub9c1\ud06c<\/strong>\u00a0\uc5d0 \uc18c\uac1c\ub41c \uae00\ub4e4\uc744 \ucc38\uace0\ud55c\ub2e4.<\/p>\n<h3 id=\"head-fbfee167f69ebe7505c7bb5f07b1b738150f6ace\">4.1. \uc0c8 \ud504\ub85c\uc81d\ud2b8 \ub9cc\ub4e4\uae30<\/h3>\n<ol type=\"1\">\n<li>Visual Studio \uc758\u00a0<strong>\uc0c8 \ud504\ub85c\uc81d\ud2b8<\/strong>\u00a0\ub9c8\ubc95\uc0ac\ub97c \uc5f4\uace0, \uc544\ub798 \uadf8\ub9bc\uacfc \uac19\uc774\u00a0<strong><strong>MFC \uc751\uc6a9 \ud504\ub85c\uadf8\ub7a8<\/strong><\/strong>\u00a0\uc744 \uc120\ud0dd\ud55c \ud6c4 \ud504\ub85c\uc81d\ud2b8 \uc774\ub984\uc744 \uc785\ub825\ud558\uace0 \ud655\uc778\uc744 \ud074\ub9ad\ud55c\ub2e4.\n<ul>\n<li>\uc608) \ud504\ub85c\uc81d\ud2b8 \uc774\ub984:\u00a0<strong><strong>MFC4Direct3D<\/strong><\/strong><\/li>\n<\/ul>\n<p><img decoding=\"async\" alt=\"\" src=\"http:\/\/vipertech.cdn1.cafe24.com\/MFC4D3D\/New_D3DProject0.png\" \/><\/li>\n<li><strong><strong>MFC \uc751\uc6a9 \ud504\ub85c\uadf8\ub7a8 \ub9c8\ubc95\uc0ac<\/strong><\/strong>\u00a0\uac00 \uc5f4\ub9ac\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \uc120\ud0dd\ud55c\ub2e4.\n<ul>\n<li><strong>\ub2e8\uc77c \ubb38\uc11c<\/strong>\u00a0\ub97c \uc120\ud0dd\ud55c\ub2e4.<\/li>\n<li><strong>\ubb38\uc11c\/\ubdf0 \uc544\ud0a4\ud14d\ucc98 \uc9c0\uc6d0<\/strong>\u00a0\uc740 \uccb4\ud06c\ud558\uc9c0 \uc54a\ub294\ub2e4(\ub2e8\uc77c \ubdf0 \uad6c\uc870).<\/li>\n<li><strong>\ucc38\uace0&gt;<\/strong>\u00a0\uc720\ub2c8\ucf54\ub4dc\ub97c \uc0ac\uc6a9\ud558\uc9c0 \uc54a\ub294 \uacbd\uc6b0,\u00a0<strong>\uc720\ub2c8\ucf54\ub4dc \ub77c\uc774\ube0c\ub7ec\ub9ac \uc0ac\uc6a9<\/strong>\u00a0\uc744 \uccb4\ud06c\ud558\uc9c0 \uc54a\ub294\ub2e4.<\/li>\n<\/ul>\n<p><img decoding=\"async\" alt=\"\" src=\"http:\/\/vipertech.cdn1.cafe24.com\/MFC4D3D\/New_D3DProject1.png\" \/><\/li>\n<li><strong><strong>MFC \uc751\uc6a9 \ud504\ub85c\uadf8\ub7a8 \ub9c8\ubc95\uc0ac<\/strong><\/strong>\u00a0\uc758 \ub098\uba38\uc9c0 \uacfc\uc815\uc740\u00a0<strong>\uae30\ubcf8\uac12<\/strong>\uc744 \uc0ac\uc6a9\ud55c\ub2e4.<\/li>\n<li>\uc0c8 \ud504\ub85c\uc81d\ud2b8 \ub9cc\ub4e4\uae30 \ub05d\ub098\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \uad6c\uc870\uac00 \ub420 \uac83\uc774\ub2e4.<img decoding=\"async\" alt=\"\" src=\"http:\/\/vipertech.cdn1.cafe24.com\/MFC4D3D\/D3DProject.png\" \/><\/li>\n<\/ol>\n<h3 id=\"head-67b3c40633d83bbb112a1d972088a12b35a7fd35\">4.2. \ub77c\uc774\ube0c\ub7ec\ub9ac \ub9c1\ud06c \uc2dc\ud0a4\uae30<\/h3>\n<p>\uc0c8\ub85c\uc6b4 \ud504\ub85c\uc81d\ud2b8\uac00 \ub9cc\ub4e4\uc5b4\uc84c\ub2e4\uba74, Direct3D \ub97c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub3c4\ub85d\u00a0<strong>Direct3D \ub77c\uc774\ube0c\ub7ec\ub9ac\ub97c \ucd94\uac00<\/strong>\ud55c\ub2e4. \ub77c\uc774\ube0c\ub7ec\ub9ac \ucd94\uac00\ub294 \ud504\ub85c\uc81d\ud2b8 \uc18d\uc131\uc5d0\uc11c \ucd94\uac00\ud558\uac70\ub098 \ucef4\ud30c\uc77c \uc9c0\uc2dc\uc5b4\ub97c \uc0ac\uc6a9\ud55c\ub2e4.<\/p>\n<ul>\n<li>D3D9.lib<\/li>\n<li>D3DX9.lib<\/li>\n<li>Winmm.lib<\/li>\n<\/ul>\n<h4 id=\"head-8802501c99c4b2efa1877f11ec4779ebd33fd281\">4.2.1. \ubc29\ubc951: \ud504\ub85c\uc81d\ud2b8 \uc18d\uc131\uc5d0\uc11c \ub77c\uc774\ube0c\ub7ec\ub9ac \ucd94\uac00<\/h4>\n<ul>\n<li><img decoding=\"async\" alt=\"\" src=\"http:\/\/vipertech.cdn1.cafe24.com\/MFC4D3D\/Add_3DLibrary.png\" \/><\/li>\n<\/ul>\n<h4 id=\"head-3a2d1ca90fabfac2f71f743e06700bbabe92d167\">4.2.2. \ubc29\ubc952: \ucef4\ud30c\uc77c \uc9c0\uc2dc\uc5b4\ub97c \uc0ac\uc6a9\ud558\uc5ec \ub77c\uc774\ube0c\ub7ec\ub9ac \ucd94\uac00<\/h4>\n<p><strong>MFC \uc751\uc6a9 \ud504\ub85c\uadf8\ub7a8 \ud504\ub85c\uc81d\ud2b8\ub294 \ubbf8\ub9ac \ucef4\ud30c\uc77c\ub41c \ud5e4\ub354 (Precompiled Header) \ub97c \uc0ac\uc6a9\ud558\ubbc0\ub85c\u00a0<\/strong><tt>StdAfx.h<\/tt>\u00a0\ud5e4\ub354 \ud30c\uc77c\uc5d0 \ub2e4\uc74c\uacfc \uac19\uc774 \ucd94\uac00\ud558\uba74 \ub41c\ub2e4.<\/p>\n<ul>\n<li>\n<div dir=\"ltr\" lang=\"en\">\n<pre dir=\"ltr\" id=\"CA-0fc247a5c701b547ef9d89c58da54e0aa2a271e6_000\" lang=\"en\">#pragma comment( lib, \"D3D9\" )\n#pragma comment( lib, \"D3DX9\" )\n#pragma comment( lib, \"Winmm\" )<\/pre>\n<\/div>\n<\/li>\n<\/ul>\n<h2 id=\"head-65dd7e0438b1077818c3f604a5d8349013dd37e4\">5. \ud504\ub85c\uadf8\ub7a8 \uad6c\uc870 \uc774\ud574\ud558\uae30<\/h2>\n<p>\uae30\ubcf8\uc801\uc778 \ud504\ub85c\uc81d\ud2b8 \uc124\uc815\uc774 \ub05d\ub0ac\ub2e4\uba74 \uad6c\ud604\uc5d0 \uc55e\uc11c \ub2e4\uc74c\uc758 \uadf8\ub9bc\uc744 \ubcf4\uba74\uc11c \uc55e\uc73c\ub85c \ub9cc\ub4e4\uac8c \ud504\ub85c\uadf8\ub7a8\uc5d0 \ub300\ud558\uc5ec \ub300\ub7b5\uc801\uc778 \uad6c\uc870\ub97c \ud30c\uc545\ud574 \ubcf4\uc790.<\/p>\n<ul>\n<li><img decoding=\"async\" alt=\"\" src=\"http:\/\/vipertech.cdn1.cafe24.com\/MFC4D3D\/MFC4D3D_Classes.png\" \/><\/li>\n<\/ul>\n<p>\uc5ec\ub7ec\uac1c\uc758 \ucd94\uac00\uc801\uc778 \ud074\ub798\uc2a4\uc640 \ub354 \ub9ce\uc740 \uba64\ubc84 \ud568\uc218\ub4e4\uc774 \uc788\uc9c0\ub9cc \uc5ec\uae30\uc11c\ub294 \ud504\ub85c\uadf8\ub7a8 \ucd08\uae30\ud654, \ub80c\ub354\ub9c1, \ub9c8\ubb34\ub9ac \uc791\uc5c5\uc758 \uc8fc\ucd95\uc744 \uc774\ub8e8\ub294 \ubd80\ubd84\uc5d0 \ub300\ud574\uc11c\ub9cc \uc815\ub9ac\ud558\uc600\ub2e4.<\/p>\n<p>\uc544\ub798\uc5d0\uc11c \uc124\uba85\ud558\uaca0\uc9c0\ub9cc\u00a0<strong>CChildView<\/strong>\u00a0\ud074\ub798\uc2a4\ub294\u00a0<strong>C3DBase<\/strong>\u00a0\ud074\ub798\uc2a4\ub97c \uc0c1\uc18d \ubc1b\uc740 \ud074\ub798\uc2a4\ub85c\u00a0<em><tt>UpdateFrame()<\/tt><\/em>\u00a0\uacfc\u00a0<em><tt>Render()<\/tt><\/em>\u00a0\ud568\uc218\ub294\u00a0<strong>C3DBase<\/strong>\u00a0\ud074\ub798\uc2a4\uc5d0 \uc815\uc758\ub41c \uac00\uc0c1 \ud568\uc218 (Virtual Function) \ub97c \uc7ac\uc815\uc758 (Overriding) \ud55c \uac83\uc774\ub2e4.<\/p>\n<p>\uadf8\ub7fc, \ud504\ub85c\uadf8\ub7a8 \ucd08\uae30\ud654, \ub80c\ub354\ub9c1, \ub9c8\ubb34\ub9ac \uc791\uc5c5\uc5d0 \ub300\ud558\uc5ec \uc2dc\ud038\uc2a4 \ub2e4\uc774\uc5b4\uadf8\ub7a8\uc744 \ubcf4\uba74\uc11c \ucc98\ub9ac \uacfc\uc815\uc744 \uc774\ud574\ud574 \ubcf4\uc790.<\/p>\n<h3 id=\"head-e5adee582b1019b06804a0dfd82977e876669f0b\">5.1. \ucd08\uae30\ud654 \uacfc\uc815<\/h3>\n<p>\uc77c\ubc18\uc801\uc778 MFC \uc751\uc6a9 \ud504\ub85c\uadf8\ub7a8 \ucd08\uae30\ud654 \uacfc\uc815\uc5d0 3D \uc7a5\uce58 \ucd08\uae30\ud654\/\uc124\uc815 \ubc0f 3D \uac1d\uccb4 \uc0dd\uc131 \uacfc\uc815\uc744 \ucd94\uac00\ud55c \uac83\uc73c\ub85c\u00a0<tt>CChildView::InitStartup()<\/tt>\u00a0\ud568\uc218\uc5d0\uc11c \ud544\uc694\ud55c \ucd08\uae30\ud654 \uacfc\uc815\uc744 \ucd94\uac00\ud558\uba74 \ub41c\ub2e4.<\/p>\n<p>\uc608\ub97c \ub4e4\uc5b4 \uce74\uba54\ub77c \ubc0f \uc870\uba85\uc744 \ucd08\uae30\ud654 \ud558\uac70\ub098, \uaca9\uc790 (Grid) \uac1d\uccb4\ub97c \uc0dd\uc131\ud55c\ub2e4.<\/p>\n<ul>\n<li><img decoding=\"async\" alt=\"\" src=\"http:\/\/vipertech.cdn1.cafe24.com\/MFC4D3D\/Sequence_Startup.png\" \/><\/li>\n<\/ul>\n<h3 id=\"head-5102d057774d1610fca036d4bc65dbc745834a93\">5.2. \ub80c\ub354\ub9c1 \uacfc\uc815<\/h3>\n<ul>\n<li>\uae30\ubcf8 \ub80c\ub354\ub9c1 \uacfc\uc815\n<ul>\n<li>\ub8e8\ud504\ub97c \ud1b5\ud55c \ub80c\ub354\ub9c1 \uacfc\uc815 \uc218\ud589<\/li>\n<\/ul>\n<p><img decoding=\"async\" alt=\"\" src=\"http:\/\/vipertech.cdn1.cafe24.com\/MFC4D3D\/Sequence_Rendering0.png\" \/><\/li>\n<li>\ud654\uba74 \uac31\uc2e0\uc5d0 \uc758\ud55c \ub80c\ub354\ub9c1 \uacfc\uc815\n<ul>\n<li>\ucc3d\uc758 \uc804\ud658\uc774\ub098 \ud06c\uae30 \uc870\uc808, \uc774\ub3d9 \uc2dc \ubc1c\uc0dd\ud558\ub294 \ud654\uba74 \uac31\uc2e0\uc5d0 \ub300\ud558\uc5ec \ub80c\ub354\ub9c1 \uacfc\uc815 \uc218\ud589<\/li>\n<\/ul>\n<p><img decoding=\"async\" alt=\"\" src=\"http:\/\/vipertech.cdn1.cafe24.com\/MFC4D3D\/Sequence_Rendering1.png\" \/><\/li>\n<\/ul>\n<h3 id=\"head-40fd67806aa8bbeaf9fd2441deed6180888a1376\">5.3. \ub9c8\ubb34\ub9ac \uacfc\uc815<\/h3>\n<p>\ud504\ub85c\uadf8\ub7a8 \uc885\ub8cc \uc2dc 3D \uc7a5\uce58 \ud574\uc81c\uc640 3D \uac1d\uccb4 \uc81c\uac70 \uacfc\uc815\uc744 \uc218\ud589\ud55c\ub2e4.\u00a0<tt>CChildView::FinalCleanup()<\/tt>\u00a0\ud568\uc218\uc5d0\uc11c \ud544\uc694\ud55c \ub9c8\ubb34\ub9ac \uacfc\uc815\uc744 \ucd94\uac00\ud558\uba74 \ub41c\ub2e4.<\/p>\n<p>\uc608\ub97c \ub4e4\uc5b4\u00a0<tt>CChildView::InitStartup()<\/tt>\u00a0\ud568\uc218\uc5d0\uc11c \uc0dd\uc131\ub41c \uac1d\uccb4\ub97c \uc81c\uac70\ud55c\ub2e4.<\/p>\n<ul>\n<li><img decoding=\"async\" alt=\"\" src=\"http:\/\/vipertech.cdn1.cafe24.com\/MFC4D3D\/Sequence_Release.png\" \/><\/li>\n<\/ul>\n<h2 id=\"head-44bc645640be5ffdbf616d7809417d41b5ebe1d7\">6. Direct3D \uc5d0 \ub9de\uac8c MFC \ud504\ub85c\uadf8\ub798\ubc0d\ud558\uae30<\/h2>\n<p>\uba3c\uc800, \uc55e\uc11c \uadf8\ub9bc\uc5d0\uc11c\u00a0<strong>CMFC4Direct3DApp<\/strong>,\u00a0<strong>CMainFrame<\/strong>,\u00a0<strong>CChildView<\/strong>\u00a0\uadf8\ub9ac\uace0\u00a0<strong>C3DBase<\/strong>\u00a0\ub85c 4\uac1c\uc758 \uc8fc\uc694 \ud074\ub798\uc2a4\ub97c \ubcfc \uc218 \uc788\ub2e4. \uc774 \uc911\uc5d0\uc11c\u00a0<strong>CMFC4Direct3DApp<\/strong>\u00a0\ud074\ub798\uc2a4\ub294 \ud504\ub85c\uc81d\ud2b8\uc5d0 \ub530\ub77c \ub2e4\ub978 \uc774\ub984\uc73c\ub85c \uc0dd\uc131\ub420 \uc218\ub3c4 \uc788\uc73c\uba70, \uac01 \ud074\ub798\uc2a4\ub294 \uac1c\uc870\ud558\ub294 \uacfc\uc815\uc5d0\uc11c \uc790\uc138\ud788 \uc124\uba85\ud560 \uac83\uc774\ub2e4.<\/p>\n<h3 id=\"head-4eda4a6abf6ecdbf450c260c2beeb73b6c8cfdbc\">6.1. C3DBase \ud074\ub798\uc2a4 \ub9cc\ub4e4\uae30<\/h3>\n<p><strong>C3DBase<\/strong>\u00a0\ud074\ub798\uc2a4\ub294\u00a0<strong>CChildView<\/strong>\u00a0\ud074\ub798\uc2a4\uac00 \uc0c1\uc18d\ud558\uac8c \ub420 Base \ud074\ub798\uc2a4\ub85c \uc8fc\uc694 \uae30\ub2a5\uc740 \ub2e4\uc74c\uacfc \uac19\ub2e4.<\/p>\n<ul>\n<li>Direct3D \uc778\ud130\ud398\uc774\uc2a4\uc640 \uc7a5\uce58\ub97c \uc5bb\uc5b4\uc11c Direct3D \ub97c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub3c4\ub85d \ucd08\uae30\ud654 \ud55c\ub2e4.<\/li>\n<li>Direct3D \uc778\ud130\ud398\uc774\uc2a4\uc640 \uc7a5\uce58\ub97c \ud574\uc81c\ud558\uc5ec Direct3D \ub97c \uc885\ub8cc\ud55c\ub2e4.<\/li>\n<li>3D \ub80c\ub354\ub9c1 \uacfc\uc815\uc744 \uc218\ud589\ud55c\ub2e4.<\/li>\n<\/ul>\n<h4 id=\"head-52b3d7c1ffbf9407a6f446bf787385821e6e86bf\">6.1.1. \uba64\ubc84 \ud568\uc218<\/h4>\n<ul>\n<li>\n<div dir=\"ltr\" lang=\"en\">\n<p><span style=\"font-family: Consolas, Monaco, monospace; font-size: 12px; line-height: 18px;\">HRESULT CreateDirect3D( HWND hWnd, UINT nPresentationInterval );<\/span><\/p>\n<pre dir=\"ltr\" id=\"CA-bceeba3687ee6a3026ab9d364dcb96439ca8ee06_001\" lang=\"en\">void    ReleaseDirect3D();\nvoid    ResetDirect3D( int nWidth, int nHeight );\nvoid    RenderDirect3D();\n\nvirtual void    UpdateFrame() = 0;\nvirtual void    Render() = 0;\n\nvoid    Pause( BOOL bPause=TRUE );<\/pre>\n<\/div>\n<\/li>\n<li>CreateDirect3D() \ud568\uc218\n<ul>\n<li><strong>Direct3D \uc7a5\uce58\ub97c \uc0dd\uc131<\/strong>\ud55c\ub2e4.<\/li>\n<\/ul>\n<\/li>\n<li>ReleaseDirect3D() \ud568\uc218\n<ul>\n<li><strong>Direct3D \uc7a5\uce58\ub97c \ud574\uc81c<\/strong>\ud55c\ub2e4.<\/li>\n<\/ul>\n<\/li>\n<li>ResetDirect3D() \ud568\uc218\n<ul>\n<li>\ud654\uba74 (View) \uc758 \ud06c\uae30\uac00 \ubc14\ub014\ub54c\u00a0<strong>Direct3D \uc7a5\uce58\ub97c \uc7ac\uc124\uc815<\/strong>\ud55c\ub2e4.<\/li>\n<\/ul>\n<\/li>\n<li>RenderDirect3D() \ud568\uc218\n<ul>\n<li><strong>\ub80c\ub354\ub9c1 \uacfc\uc815\uc744 \uc218\ud589<\/strong>\ud55c\ub2e4. \ub0b4\ubd80\uc5d0\uc11c\u00a0<em><tt>UpdateFrame()<\/tt><\/em>\u00a0\uacfc\u00a0<em><tt>Render()<\/tt><\/em>\u00a0\ud568\uc218\ub97c \ud638\ucd9c\ud55c\ub2e4.<\/li>\n<\/ul>\n<\/li>\n<li><em>UpdateFrame()<\/em>\u00a0\ud568\uc218 (\uac00\uc0c1 \ud568\uc218)\n<ul>\n<li>\uc0c1\uc18d \ubc1b\uc740 \ud074\ub798\uc2a4\uc5d0\uc11c \uc7ac\uc815\uc758 \ud574\uc57c\ud558\uba70\u00a0<strong>\ud504\ub808\uc784 \uac31\uc2e0 \ucc98\ub9ac<\/strong>\ub97c \ud55c\ub2e4.<\/li>\n<\/ul>\n<\/li>\n<li><em>Render()<\/em>\u00a0\ud568\uc218 (\uac00\uc0c1 \ud568\uc218)\n<ul>\n<li>\uc0c1\uc18d \ubc1b\uc740 \ud074\ub798\uc2a4\uc5d0\uc11c \uc7ac\uc815\uc758 \ud574\uc57c\ud558\uba70\u00a0<strong>\ub80c\ub354\ub9c1 \ucc98\ub9ac<\/strong>\ub97c \ud55c\ub2e4.<\/li>\n<\/ul>\n<\/li>\n<li>Pause() \ud568\uc218\n<ul>\n<li>\ub2e4\ub978 \ucc3d\uc73c\ub85c \ud3ec\ucee4\uc2a4\uac00 \uc774\ub3d9 \uc2dc CPU \uc810\uc720\uc728\uc744 \ub5a8\uc5b4\ub728\ub9ac\uae30 \uc704\ud574\uc11c \uc0ac\uc6a9\ud55c\ub2e4.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h3 id=\"head-bb0a0b741b72771fd70f0b864257ac19f0152c8c\">6.2. CChildView \ud074\ub798\uc2a4 \uac1c\uc870\ud558\uae30<\/h3>\n<p><strong>CChildView<\/strong>\u00a0\ud074\ub798\uc2a4\ub294\u00a0<strong>C3DBase<\/strong>\u00a0\ud074\ub798\uc2a4\ub97c \uc0c1\uc18d\ubc1b\uc740 \ud074\ub798\uc2a4\ub85c \uc2e4\uc81c 3D \ub80c\ub354\ub9c1\uc744 \uc218\ud589\ud55c\ub2e4. \ub610\ud55c Direct3D \uc758 \ucd08\uae30\ud654 \ubc0f \ud574\uc81c\uac00 \uc2e4\uc81c\ub85c \ucc98\ub9ac\ub418\ub294 \uacf3\uc774\ub2e4. \uc989, 3D \ub80c\ub354\ub9c1\uc758 \ud575\uc2ec \ud074\ub798\uc2a4\uac00 \ub41c\ub2e4.<\/p>\n<ul>\n<li>PreCreateWindow() \ud568\uc218 \uc218\uc815\n<ul>\n<li>\uc544\ub798\uc758 \ucf54\ub4dc \uc911\u00a0<tt>AfxRegisterWndClass()<\/tt>\u00a0\ud568\uc218\uc758 3\ubc88\uc9f8 \ub9e4\uac1c\ubcc0\uc218 \uac12\uc744\u00a0<tt>NULL<\/tt>\u00a0\ub85c \uc124\uc815\ud55c\ub2e4.<\/li>\n<\/ul>\n<div dir=\"ltr\" lang=\"en\">\n<p><span style=\"font-family: Consolas, Monaco, monospace; font-size: 12px; line-height: 18px;\">\u00a0 \u00a01 BOOL CChildView::PreCreateWindow(CREATESTRUCT&amp; cs)<\/span><\/p>\n<pre dir=\"ltr\" id=\"CA-fa9d70a10bc4c0cb79cd3a58861ef2285376103d_002\" lang=\"en\">   2 {\n   3         if (!CWnd::PreCreateWindow(cs))\n   4                 return FALSE;\n   5 \n   6         cs.dwExStyle |= WS_EX_CLIENTEDGE;\n   7         cs.style &amp;= ~WS_BORDER;\n   8         cs.lpszClass = AfxRegisterWndClass(CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS,\n   9                 ::LoadCursor(NULL, IDC_ARROW), NULL, NULL);\n  10 \n  11         return TRUE;\n  12 }<\/pre>\n<\/div>\n<ul>\n<li><strong>\ucc38\uace0&gt;<\/strong>\u00a0<tt>AfxRegisterWndClass()<\/tt>\u00a0\ud568\uc218\uc758 3\ubc88\uc9f8 \ub9e4\uac1c\ubcc0\uc218\ub294\u00a0<strong>Background Brush<\/strong>\u00a0\ub97c \uc124\uc815\ud558\ub294 \uacf3\uc73c\ub85c\u00a0<tt>NULL<\/tt>\u00a0\ub85c \uc124\uc815\ud558\uac8c \ub418\uba74 \ud504\ub808\uc784\ub9c8\ub2e4 \ud654\uba74\uc774 \uc9c0\uc6cc\uc9c0\uc9c0 \uc54a\ub294\ub2e4. \uc989,\ud654\uba74\uc774 \uae5c\ubc15\uac70\ub9ac\ub294 \ud604\uc0c1 (Flicker \ud604\uc0c1) \uc744 \ubc29\uc9c0\ud55c\ub2e4.<\/li>\n<\/ul>\n<\/li>\n<li>OnPaint() \ud568\uc218 \uc218\uc815\n<ul>\n<li>\uc704\uc5d0\uc11c \uc124\uba85\ud588\ub4ef\uc774 \ucc3d \ubcc0\ud654\uc5d0 \ub530\ub978 \ud654\uba74 \uac31\uc2e0 \uacfc\uc815\uc73c\ub85c \ub80c\ub354\ub9c1 \uacfc\uc815\uc744 \uc218\ud589\ud55c\ub2e4.<\/li>\n<li>WM_PAINT \uba54\uc138\uc9c0 \ud578\ub4e4\ub7ec.<\/li>\n<\/ul>\n<div dir=\"ltr\" lang=\"en\">\n<pre dir=\"ltr\" id=\"CA-7ec332a895067ae264cf9214d40b7ff701c092a1_003\" lang=\"en\">   1 void CChildView::OnPaint()\n   2 {\n   3         CPaintDC dc(this);      \/\/ \uc0ad\uc81c\ud558\uba74 \uc548\ub428.\n   4 \n   5         if( IS_NOT_NULL( g_pD3DDevice ) )\n   6         {\n   7                 \/\/ \ub80c\ub354\ub9c1 \uc218\ud589\n   8                 RenderDirect3D();\n   9         }\n  10 }<\/pre>\n<\/div>\n<ul>\n<li><strong>\ucc38\uace0&gt;<\/strong>\u00a0<tt>CPaintDC\u00a0dc(this);<\/tt>\u00a0\ucf54\ub4dc\ub294 \uc0ad\uc81c\ud558\uc9c0 \ub9d0\uac83. \uc0ad\uc81c\ud558\uac8c \ub418\uba74 \ud654\uba74 \uac31\uc2e0 \uc2dc \ucc3d\uc758 \ud504\ub808\uc784 \uac31\uc2e0\uc774 \ub290\ub824\uc9c0\uac8c \ub41c\ub2e4.<\/li>\n<\/ul>\n<\/li>\n<li>InitStartup() \ud568\uc218 \ucd94\uac00\n<ul>\n<li><strong>\ucd08\uae30\ud654 \uacfc\uc815\uc5d0 \ud544\uc694\ud55c \uc791\uc5c5\uc744 \uc5ec\uae30\uc5d0 \ucd94\uac00\ud55c\ub2e4.<\/strong><\/li>\n<\/ul>\n<div dir=\"ltr\" lang=\"en\">\n<pre dir=\"ltr\" id=\"CA-32d8df964189f28b11bdbc379c48bd4876715859_004\" lang=\"en\">   1 HRESULT CChildView::InitStartup()\n   2 {\n   3         \/\/----------------------------------------------------------------------\n   4         \/\/ TODO: \ucd08\uae30\ud654 \ucc98\ub9ac\ub97c \uc218\ud589\ud55c\ub2e4.\n   5         \/\/      * \ubc30\uacbd\uc0c9 \uc124\uc815\n   6         \/\/      * \uce74\uba54\ub77c \uc124\uc815\n   7         \/\/      * \uc870\uba85 \uc124\uc815\n   8         \/\/      * \ub80c\ub354\ub9c1 \uac1d\uccb4 \uc0dd\uc131 \ub4f1\n   9         \/\/\n  10 \n  11         \/\/ \ubc30\uacbd\uc0c9 \uc124\uc815\n  12         SetBackColor( 0x40, 0x40, 0x40 );\n  13 \n  14         \/\/ \uce74\uba54\ub77c \uc124\uc815\n  15         m_pCamera = new CCamera();\n  16         InitCamera();\n  17 \n  18         \/\/ \uc870\uba85 \uc124\uc815\n  19         InitLight();\n  20         LightEnable( FALSE );           \/\/ \uc870\uba85 \ube44\ud65c\uc131\ud654\n  21 \n  22         \/\/ \uaca9\uc790 \uc0dd\uc131\n  23         m_grid.Create( 20, 4, 20 );\n  24 \n  25         return S_OK;\n  26 }<\/pre>\n<\/div>\n<\/li>\n<li>FinalCleanup() \ucd94\uac00\n<ul>\n<li><strong>\ucd08\uae30\ud654 \uacfc\uc815\uc774\ub098 \uc2e4\ud589 \uacfc\uc815\uc5d0\uc11c \uc0dd\uc131\ub41c 3D \uac1d\uccb4\ub97c \uc5ec\uae30\uc11c \uc81c\uac70\ud55c\ub2e4.<\/strong><\/li>\n<\/ul>\n<div dir=\"ltr\" lang=\"en\">\n<pre dir=\"ltr\" id=\"CA-1a81992db44728984327dd0028d19d7fb8be3042_005\" lang=\"en\">   1 void CChildView::FinalCleanup()\n   2 {\n   3         \/\/----------------------------------------------------------------------\n   4         \/\/ TODO: \ub9c8\ubb34\ub9ac \ucc98\ub9ac\ub97c \uc218\ud589\ud55c\ub2e4.\n   5         \/\/      * \ucd08\uae30\ud654 \ub610\ub294 \uc218\ud589 \uc911 \uc0dd\uc131\ub41c 3D \uac1d\uccb4 \ud574\uc81c \ub4f1\n   6 \n   7         \/\/ \uaca9\uc790 \uc81c\uac70\n   8         m_grid.Release();\n   9 \n  10         \/\/ \uce74\uba54\ub77c \uc81c\uac70\n  11         SAFE_DELETE( m_pCamera );\n  12 \n  13         \/\/ Direct 3D \ud574\uc81c\n  14         ReleaseDirect3D();\n  15 }<\/pre>\n<\/div>\n<\/li>\n<li>UpdateFrame() \ud568\uc218 \uc7ac\uc815\uc758 (C3DBase \uac00\uc0c1 \ud568\uc218)\n<ul>\n<li><strong>\uc2e4\uc81c \ud504\ub808\uc784 \uac31\uc2e0 \uc791\uc5c5\uc744 \uc5ec\uae30\uc5d0 \ucd94\uac00\ud55c\ub2e4.<\/strong><\/li>\n<\/ul>\n<div dir=\"ltr\" lang=\"en\">\n<pre dir=\"ltr\" id=\"CA-4123d9fffc889b3919d1810db1ace908e4cb10d1_006\" lang=\"en\">   1 void CChildView::UpdateFrame()\n   2 {\n   3         if( IS_NOT_NULL( m_pCamera ) )\n   4         {\n   5                 \/\/ \uce74\uba54\ub77c \uc124\uc815\n   6                 m_pCamera-&gt;SetCamera();\n   7         }\n   8 \n   9         \/\/--------------------------------------------------------------------------\n  10         \/\/ TODO: \ud504\ub808\uc784 \uac31\uc2e0 \ucc98\ub9ac\ub97c \uc218\ud589\ud55c\ub2e4.\n  11         \/\/\n  12 }<\/pre>\n<\/div>\n<\/li>\n<li>Render() \ud568\uc218 \uc7ac\uc815\uc758 (C3DBase \uac00\uc0c1 \ud568\uc218)\n<ul>\n<li><strong>\uc2e4\uc81c \ub80c\ub354\ub9c1 \uc791\uc5c5\uc744 \uc5ec\uae30\uc5d0 \ucd94\uac00\ud55c\ub2e4.<\/strong><\/li>\n<\/ul>\n<div dir=\"ltr\" lang=\"en\">\n<pre dir=\"ltr\" id=\"CA-0b1b3d47df8da5ba84b000f18bfea20c2a0b3a01_007\" lang=\"en\">   1 void CChildView::Render()\n   2 {\n   3         \/\/ \uaca9\uc790 \ub80c\ub354\ub9c1\n   4         m_grid.Render();\n   5 \n   6         \/\/--------------------------------------------------------------------------\n   7         \/\/ TODO: 3D \uc624\ube0c\uc81d\ud2b8\ub97c \ub80c\ub354\ub9c1\ud55c\ub2e4.\n   8         \/\/\n   9 }<\/pre>\n<\/div>\n<\/li>\n<li>WM_SIZE \uba54\uc138\uc9c0 \ud578\ub4e4\ub7ec \ucd94\uac00\n<ul>\n<li>\ucc3d\uc758 \ud06c\uae30\uac00 \ubc14\ub014 \ub54c Direct3D \uc7a5\uce58\ub97c \uc7ac\uc124\uc815\ud55c\ub2e4.<\/li>\n<li>\uc774 \uacfc\uc815\uc774 \uc0dd\ub7b5\ub418\uba74 \ucc3d\uc758 \ud06c\uae30\uac00 \ubc14\ub014 \uc2dc 3D \ud654\uba74\uc774 \ucc0c\uadf8\ub7ec\uc9c0\uac70\ub098 \ub3c4\ud2b8\uac00 \ubb49\uac8c\uc9c0\ub294 \ud604\uc0c1\uc774 \ubc1c\uc0dd\ud55c\ub2e4.<\/li>\n<\/ul>\n<div dir=\"ltr\" lang=\"en\">\n<pre dir=\"ltr\" id=\"CA-0ab3166ddde1e8ca422dbdb52881592b0aa10e5f_008\" lang=\"en\">   1 void CChildView::OnSize(UINT nType, int cx, int cy)\n   2 {\n   3         __super::OnSize(nType, cx, cy);\n   4 \n   5         if( IS_NOT_NULL( g_pD3DDevice ) )\n   6         {\n   7                 \/\/ Direct3D \uc7ac\uc124\uc815\n   8                 ResetDirect3D( cx, cy );\n   9 \n  10                 \/\/ \uc870\uba85 \uc124\uc815\n  11                 InitLight();\n  12                 LightEnable( FALSE );           \/\/ \uc870\uba85 \ube44\ud65c\uc131\ud654\n  13         }\n  14 }<\/pre>\n<\/div>\n<\/li>\n<\/ul>\n<h3 id=\"head-8c54cb37b7d861a811aa26092d39cd7ae13c483f\">6.3. CMainFrame \ud074\ub798\uc2a4 \uac1c\uc870\ud558\uae30<\/h3>\n<p><strong>CMainFrame<\/strong>\u00a0\ud074\ub798\uc2a4\ub294 MFC \ud504\ub808\uc784\uc6cc\ud06c\uc5d0\uc11c \ucc3d\uc758 \uae30\ubcf8 \uace8\uaca9\uc744 \uc774\ub8e8\ub294 \ud074\ub798\uc2a4\ub85c \ucc3d\uc744 \uc5f4\uac70\ub098 \ub2eb\uae30, \uba54\ub274, \ud234\ubc14, \uc0c1\ud0dc\ubc14 \ub4f1\uc744 \uad00\ub9ac\ud558\uba70 \uc8fc\ub85c \uc0ac\uc6a9\uc790\uc640\uc758 \uc778\ud130\ud398\uc774\uc2a4 \ucc98\ub9ac\ub97c \ub2f4\ub2f9\ud558\uac8c \ub41c\ub2e4. \ub530\ub77c\uc11c 3D \ub80c\ub354\ub9c1\uc5d0\ub294 \ubcc4\ub85c \uc911\uc694\ud558\uc9c0 \uc54a\ub2e4.<\/p>\n<ul>\n<li>InitDirect3D() \ud568\uc218 \ucd94\uac00\n<ul>\n<li>\ud504\ub85c\uadf8\ub7a8 \uc2dc\uc791 \uc2dc 3D \ucd08\uae30\ud654 \uacfc\uc815\uc744 \uc218\ud589\ud55c\ub2e4.<\/li>\n<\/ul>\n<div dir=\"ltr\" lang=\"en\">\n<pre dir=\"ltr\" id=\"CA-1f1480cb819341e65413d3fcd9cd2adddea153c3_009\" lang=\"en\">   1 HRESULT CMainFrame::InitDirect3D()\n   2 {\n   3         \/\/ View \uc601\uc5ed \ud06c\uae30 \uc124\uc815\n   4         SetSize( 800, 600 );\n   5 \n   6         \/\/ Direct 3D \ucd08\uae30\ud654\n   7         m_wndView.CreateDirect3D( m_wndView.m_hWnd, D3DPRESENT_INTERVAL_IMMEDIATE );\n   8 \n   9         \/\/ \uc0ac\uc6a9\uc790 \ucd08\uae30\ud654 \uc218\ud589\n  10         m_wndView.InitStartup();\n  11 \n  12         return S_OK;\n  13 }<\/pre>\n<\/div>\n<\/li>\n<li>SetSize() \ud568\uc218 \ucd94\uac00\n<ul>\n<li>\ud504\ub85c\uadf8\ub7a8 \uc2dc\uc791 \uc2dc 3D \ud654\uba74\uc758 \ud06c\uae30\ub97c \uc124\uc815\ud558\ub294 \uacf3\uc73c\ub85c 3D \ud654\uba74\uc5d0 \ub9de\uac8c \ucc3d\uc758 \ud504\ub808\uc784 \ud06c\uae30\ub97c \uc7ac\uacc4\uc0b0\ud558\uace0 \ucc3d \ud06c\uae30\ub97c \ubcc0\uacbd\ud55c\ub2e4.<\/li>\n<li>\ub9e4\uac1c\ubcc0\uc218\ub294 \uc2e4\uc81c 3D \ud654\uba74\uc758 \ud06c\uae30\ub97c \uc124\uc815\ud55c\ub2e4.<\/li>\n<\/ul>\n<div dir=\"ltr\" lang=\"en\">\n<pre dir=\"ltr\" id=\"CA-4a1972e39b3cc030b06550c44802704050b0a7b4_010\" lang=\"en\">   1 void CMainFrame::SetSize( int nWidth, int nHeight )\n   2 {\n   3         RECT client, frame;\n   4 \n   5         GetWindowRect( &amp;frame );\n   6         m_wndView.GetClientRect( &amp;client );\n   7 \n   8         \/\/ View \uc601\uc5ed \ud06c\uae30\uc5d0 \ub9de\uac8c \ucc3d\ud06c\uae30 \ubcc0\uacbd\n   9         frame.right  = nWidth  + frame.right  - client.right;\n  10         frame.bottom = nHeight + frame.bottom - client.bottom;\n  11 \n  12         MoveWindow( &amp;frame );\n  13 }<\/pre>\n<\/div>\n<\/li>\n<li>DestroyWindow() \ud568\uc218 \uc7ac\uc815\uc758 (CWnd \uac00\uc0c1 \ud568\uc218)\n<ul>\n<li>\ud504\ub85c\uadf8\ub7a8 \uc885\ub8cc \uacfc\uc815\uc758 \uc2dc\uc791\uc810\uc73c\ub85c \ub9c8\ubb34\ub9ac \uacfc\uc815\uc744 \uc218\ud589\ud55c\ub2e4.<\/li>\n<\/ul>\n<div dir=\"ltr\" lang=\"en\">\n<pre dir=\"ltr\" id=\"CA-c8de93249968e3beb3e14a0995846dcf5144eeff_011\" lang=\"en\">   1 BOOL CMainFrame::DestroyWindow()\n   2 {\n   3         \/\/ \ub9c8\ubb34\ub9ac \uc791\uc5c5\n   4         m_wndView.FinalCleanup();\n   5 \n   6         return CFrameWnd::DestroyWindow();\n   7 }<\/pre>\n<\/div>\n<\/li>\n<li>WM_ACTIVATE \uba54\uc138\uc9c0 \ud578\ub4e4\ub7ec \ucd94\uac00\n<ul>\n<li>\ucc3d\uc758 \ud3ec\ucee4\uc2a4 \uc774\ub3d9 \uc720\ubb34\uc5d0 \ub530\ub77c 3D \ub80c\ub354\ub9c1 \uc18d\ub3c4\ub97c \uc870\uc808\ud55c\ub2e4. \uc989, CPU \uc810\uc720\uc728\uc744 \uc870\uc808\ud55c\ub2e4.<\/li>\n<\/ul>\n<div dir=\"ltr\" lang=\"en\">\n<pre dir=\"ltr\" id=\"CA-866b43a396cf4ce173bdd67cf757898ed088c5fe_012\" lang=\"en\">   1 void CMainFrame::OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized)\n   2 {\n   3         CFrameWnd::OnActivate(nState, pWndOther, bMinimized);\n   4 \n   5         m_wndView.Pause( nState == WA_INACTIVE );\n   6 }<\/pre>\n<\/div>\n<\/li>\n<\/ul>\n<h3 id=\"head-224bc3bacfa23fbf6fc2a47913647ab1b1db1dfd\">6.4. CMFC4Direct3DApp \ud074\ub798\uc2a4 \uac1c\uc870\ud558\uae30<\/h3>\n<p><strong>CMFC4Direct3DApp<\/strong>\u00a0\ud074\ub798\uc2a4\ub294 \uac00\uc7a5 \uba3c\uc800 \uc2e4\ud589\ub418\ubbc0\ub85c \uc2e4\ud589 \uc21c\uc11c\uc0c1\uc73c\ub85c \ubcf8\ub2e4\uba74 \ucd5c\uc0c1\uc704\uc5d0 \uc704\uce58\ud55c\ub2e4\uace0 \ubcfc \uc218 \uc788\ub2e4. \uc8fc\uc694 \uae30\ub2a5\uc740 \ub2e4\ub978 \uac1d\uccb4\ub4e4\uc744 \uc0dd\uc131\ud558\uace0 \uc2e4\ud589\uc2dc\ud0a4\ub294 \uc5ed\ud65c\uc744 \ud55c\ub2e4. \uadf8\ub9ac\uace0 \uac00\uc7a5 \uc911\uc694\ud55c \uae30\ub2a5\uc740\u00a0<strong>CChildView<\/strong>\u00a0\ud074\ub798\uc2a4\uc5d0\uac8c 3D \ub80c\ub354\ub9c1\ud558\ub3c4\ub85d\u00a0<tt>RenderDirect3D()<\/tt>\u00a0\ud568\uc218\ub97c \ud638\ucd9c\ud55c\ub2e4.<\/p>\n<ul>\n<li>InitInstance() \ud568\uc218 \uc218\uc815\n<ul>\n<li>\ud504\ub85c\uadf8\ub7a8 \ucd08\uae30\ud654 \uacfc\uc815\uc73c\ub85c\u00a0<strong><strong>MFC \uc751\uc6a9 \ud504\ub85c\uadf8\ub7a8 \ub9c8\ubc95\uc0ac<\/strong><\/strong>\u00a0\uc5d0\uc11c \uc0dd\uc131\ub41c \ucf54\ub4dc\uc5d0\u00a0<strong>3D \ucd08\uae30\ud654 \uacfc\uc815<\/strong>\ub9cc \ucd94\uac00\ud55c\ub2e4.<\/li>\n<\/ul>\n<div dir=\"ltr\" lang=\"en\">\n<pre dir=\"ltr\" id=\"CA-efc9aea43ffdb52164f7124375469a754cc4dc94_013\" lang=\"en\">   1 BOOL CMFC4Direct3DApp::InitInstance()\n   2 {\n   3         ...     \/\/ \uc0dd\ub7b5\n   4 \n   5         \/\/ \ucc3d \ud558\ub098\ub9cc \ucd08\uae30\ud654\ub418\uc5c8\uc73c\ubbc0\ub85c \uc774\ub97c \ud45c\uc2dc\ud558\uace0 \uc5c5\ub370\uc774\ud2b8\ud569\ub2c8\ub2e4.\n   6         pFrame-&gt;ShowWindow(SW_SHOW);\n   7         pFrame-&gt;UpdateWindow();\n   8         \/\/ \uc811\ubbf8\uc0ac\uac00 \uc788\uc744 \uacbd\uc6b0\uc5d0\ub9cc DragAcceptFiles\ub97c \ud638\ucd9c\ud569\ub2c8\ub2e4.\n   9         \/\/ SDI \uc751\uc6a9 \ud504\ub85c\uadf8\ub7a8\uc5d0\uc11c\ub294 ProcessShellCommand \ud6c4\uc5d0 \uc774\ub7ec\ud55c \ud638\ucd9c\uc774 \ubc1c\uc0dd\ud574\uc57c \ud569\ub2c8\ub2e4.\n  10 \n  11         \/\/ \ucd08\uae30\ud654 \uc218\ud589\n  12         pFrame-&gt;InitDirect3D();\n  13 \n  14         return TRUE;\n  15 }<\/pre>\n<\/div>\n<\/li>\n<li>OnIdle() \ud568\uc218 \uc7ac\uc815\uc758 (CWinApp \uac00\uc0c1 \ud568\uc218)\n<ul>\n<li>\ubc18\ubcf5 \ub8e8\ud504\ub85c\u00a0<tt>CChildView::RenderDirect3D()<\/tt>\u00a0\ud568\uc218\ub97c \ud638\ucd9c\ud55c\ub2e4.<\/li>\n<\/ul>\n<div dir=\"ltr\" lang=\"en\">\n<pre dir=\"ltr\" id=\"CA-c078f3f125481b0a5a22281affa9c5d0e96dd620_014\" lang=\"en\">   1 BOOL CMFC4Direct3DApp::OnIdle(LONG lCount)\n   2 {\n   3         CWinApp::OnIdle(lCount);\n   4 \n   5         \/\/ \ub80c\ub354\ub9c1 \uc218\ud589\n   6         static_cast&lt; CMainFrame * &gt;( m_pMainWnd )-&gt;m_wndView.RenderDirect3D();\n   7 \n   8         return TRUE;\n   9 }<\/pre>\n<\/div>\n<\/li>\n<\/ul>\n<h2 id=\"head-3312b12c82be8b577cecf6ea13e4d3a57e5d2bac\"><\/h2>\n","protected":false},"excerpt":{"rendered":"<p>http:\/\/viper.pe.kr 1. \uc18c\uac1c Direct3D \ub294 \uac8c\uc784\uc5d0\uc11c \uc8fc\ub85c \ub9ce\uc774 \uc0ac\uc6a9\ub418\uace0 \uc788\uc73c\uba70 MFC \ub294 \uc751\uc6a9 \ud504\ub85c\uadf8\ub7a8 \uac1c\ubc1c\uc5d0 \ub9ce\uc774 \uc0ac\uc6a9\ub418\uace0 \uc788\ub2e4. \uc774\ub807\uac8c \uc0ac\uc6a9 \ubaa9\uc801\uc774 \uc804\ud600 \ub2e4\ub978 \ub450 \uac00\uc9c0\ub97c \uac8c\uc784 \uac1c\ubc1c\uc5d0 \uc774\uc6a9\ud558\ub294 \uac83\uc740 \ubd80\uc801\ud569\ud558\ub2e4. \ud558\uc9c0\ub9cc \uac8c\uc784 \uc790\uccb4\ub97c \uac1c\ubc1c\ud558\ub294 \uac83\uc5d0\ub294 \ubd80\uc801\ud569\ud560\uc9c0 \ubaa8\ub974\ub098 \uac1c\ubc1c\uc5d0 \ud544\uc694\ud55c \ubcf4\uc870 \ud504\ub85c\uadf8\ub7a8\uc744 \uac1c\ubc1c\ud558\ub294\ub370\ub294 \uac00\uc7a5 \uc801\ud569\ud558\uc9c0 \uc54a\uc744\uae4c? \uc544\uc9c1\ub3c4 \ub9ce\uc740 \uc0ac\ub78c\ub4e4\uc740 MFC \ub294 \ub369\uce58\uac00 \ud06c\uace0 \ub290\ub9ac\ub2e4\uace0 \ud55c\ub2e4. \uadf8\ub7ec\ub098 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[13],"tags":[],"class_list":["post-348","post","type-post","status-publish","format-standard","hentry","category-programming"],"_links":{"self":[{"href":"http:\/\/yoonhada.com\/index.php?rest_route=\/wp\/v2\/posts\/348","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/yoonhada.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/yoonhada.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/yoonhada.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/yoonhada.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=348"}],"version-history":[{"count":0,"href":"http:\/\/yoonhada.com\/index.php?rest_route=\/wp\/v2\/posts\/348\/revisions"}],"wp:attachment":[{"href":"http:\/\/yoonhada.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=348"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/yoonhada.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=348"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/yoonhada.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=348"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}