{"id":960,"date":"2018-12-26T19:07:09","date_gmt":"2018-12-26T10:07:09","guid":{"rendered":"https:\/\/www.charlezz.com\/?p=960"},"modified":"2019-12-21T17:22:55","modified_gmt":"2019-12-21T08:22:55","slug":"opengl-7-mvp-matrix-%eb%a7%8c%eb%93%a4%ea%b8%b0","status":"publish","type":"post","link":"https:\/\/charlezz.com\/?p=960","title":{"rendered":"[OpenGL] 8. MVP Matrix \ub9cc\ub4e4\uae30"},"content":{"rendered":"<p>\uc0ac\uc2e4 \uc55e\uc11c Homogeneous \uc88c\ud45c\uc640 Matrix\ub97c \uc124\uba85\ud55c \uc774\uc720\ub294 \uc9c0\uae08 \uc54c\uc544\ubcfc MVP Matrix \ub54c\ubb38\uc785\ub2c8\ub2e4. <br \/>\nMVP Matrix\ub97c \uc0ac\uc6a9\uc548\ud558\uace0\ub3c4 \ud654\uba74\uc744 \ubb34\uc5b8\uac00 \ud45c\ud604\uc744 \ud560\uc218\ub294 \uc788\uc5c8\uc2b5\ub2c8\ub2e4. \ud558\uc9c0\ub9cc MVP Matrix\ub97c \uc0ac\uc6a9\ud558\uc9c0 \uc54a\ub294 \ub2e4\uba74 \uc624\ube0c\uc81d\ud2b8\uc5d0 \ub300\ud55c \uc774\ub3d9, \ud68c\uc804, \uc2a4\ucf00\uc77c\ub9c1 \uac19\uc740 \ubcc0\ud658 \ub4f1\uc744 \ud1b5\ud55c 3D \uacf5\uac04\uac10\uc744 \uc5bb\uae34 \ud798\ub4e4 \uac83\uc785\ub2c8\ub2e4.<\/p>\n<h1>MVP Matrix<\/h1>\n<p>MVP\ub294 Model, View, Projection\uc758 \uc57d\uc790\uc785\ub2c8\ub2e4.<\/p>\n<p>&nbsp;<\/p>\n<p><a href=\"https:\/\/www.charlezz.com\/?attachment_id=43773\" rel=\"attachment wp-att-43773\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2018\/12\/Unknown-1.jpeg\" alt=\"\" width=\"290\" height=\"174\" class=\"aligncenter size-full wp-image-43773\" \/><\/a> <a href=\"https:\/\/www.charlezz.com\/?attachment_id=43774\" rel=\"attachment wp-att-43774\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2018\/12\/Unknown.jpeg\" alt=\"\" width=\"289\" height=\"174\" class=\"aligncenter size-large wp-image-43774\" \/><\/a><\/p>\n<p>\uae00\ub85c\ub294 \uac1c\ub150\uc744 \uc124\uba85\ud558\uae30\uc5d0 \ubaa8\ud638\ud55c \uc810\uc774 \ub9ce\uc544 \uac8c\uc784\uc5d4\uc9c4 \ud234\uc778 Unity\ub97c \uc0ac\uc6a9\ud558\uc5ec MVP\uc124\uba85\ud558\uace0\uc790 \ud569\ub2c8\ub2e4.<\/p>\n<h2>Model<\/h2>\n<p>\ubaa8\ub378\uc774\ub780 \uc2a4\ud06c\ub9b0\uc0f7\uc5d0\uc11c \uc815\uc721\uba74\uccb4(\ud050\ube0c)\uc758 \ub3c4\ud615\uc744 \ub9d0\ud569\ub2c8\ub2e4, \uc989 \ud654\uba74\uc5d0 \ub098\ud0c0\ub0b4\uace0\uc790 \ud558\ub294 \uac1d\uccb4\ub97c \ub9d0\ud569\ub2c8\ub2e4.<\/p>\n<h2>View<\/h2>\n<p>\uce74\uba54\ub77c \uac1d\uccb4, \uc989 Model\uac1d\uccb4\ub97c \ubc14\ub77c\ubcf4\ub294 \ub300\uc0c1\uc785\ub2c8\ub2e4. \ub514\uc9c0\ud138 \uce74\uba54\ub77c\ub85c \uc5b4\ub5a4 \ud53c\uc0ac\uccb4\ub97c \ucc0d\uc744\ub54c \ub514\uc9c0\ud138\uce74\uba54\ub77c\uac00 View\uc5d0 \ud574\ub2f9\ud558\uace0 \ud050\ube0c\uac00 \ud53c\uc0ac\uccb4\uc5d0 \ud574\ub2f9\ud569\ub2c8\ub2e4.\u00a0<\/p>\n<h2>Projection<\/h2>\n<p>\ud22c\uc601, \uce74\uba54\ub77c\uac00 \ubaa8\ub378\uc744 \ubcfc\uc218 \uc788\ub294 \uacf5\uac04\uc744 \ub9d0\ud569\ub2c8\ub2e4. \uc2a4\ud06c\ub9b0\uc0f7\uc5d0\uc11c \ud770\uc120\uc758 \uc0ac\uac01\ubfd4 \ubaa8\uc591\uc73c\ub85c \uadf8\ub824\uc9c4 \uac83\uc774 \ubc14\ub85c Frustum(\uc808\ub450\uccb4)\ub77c\uace0 \ud558\ub294 Projection\uc785\ub2c8\ub2e4. \ud504\ub85c\uc81d\uc158\uc740 \ub300\ud45c\uc801\uc73c\ub85c 2\uac00\uc9c0\uac00 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2018\/12\/ViewFrustum.png\" alt=\"\" width=\"1000\" height=\"482\" class=\"aligncenter size-full wp-image-970\" srcset=\"https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2018\/12\/ViewFrustum.png 1000w, https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2018\/12\/ViewFrustum-300x145.png 300w, https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2018\/12\/ViewFrustum-768x370.png 768w\" sizes=\"(max-width: 1000px) 100vw, 1000px\" \/><\/p>\n<ul>\n<li>Perspective Projection : \uc774 \ud504\ub85c\uc81d\uc158\uc740 \uc0ac\ub78c\uc758 \ub208\uc774\ub098 \uce74\uba54\ub77c\uac00 \uc138\uc0c1\uc744 \ubc14\ub77c \ubcf4\ub294 \uac83\ucc98\ub7fc \uc6d0\uadfc\ubc95\uc744 \uc801\uc6a9\ud558\uc5ec \uac1d\uccb4\ub97c \ud45c\ud604\ud569\ub2c8\ub2e4.\u00a0 \uad49\uc7a5\ud788 \uc775\uc219\ud55c \ub290\ub08c\uc77c \uac81\ub2c8\ub2e4. \ucd5c\uc885\uc801\uc73c\ub85c \ub80c\ub354\ub9c1\ub418\ub294 \uacb0\uacfc\ubb3c\uc744 \ubcf4\uba74 \uc775\uc219\ud560\uac81\ub2c8\ub2e4.<\/li>\n<li>Orthographic Projection : \uc774 \ud504\ub85c\uc81d\uc158\uc740 \uc808\ub450\uccb4 \uc548\uc5d0 \uc788\ub294 \ubaa8\ub4e0 \uc624\ube0c\uc81d\ud2b8\ub4e4\uc744 \uc6d0\uadfc\uacfc \uc65c\uace1 \uc5c6\uc774 \ud45c\ud604\ud569\ub2c8\ub2e4. \ucd5c\uc885\uc801\uc73c\ub85c \ub80c\ub354\ub9c1 \ub418\ub294 \uacb0\uacfc\ubb3c\uc744 \ubcf4\uba74 \ud504\ub85c\uc81d\uc158\ub0b4\uc758 \ubaa8\ub4e0 \uc624\ube0c\uc81d\ud2b8\ub4e4\uc744 \uadf8\ub300\ub85c \uc555\ucd95\ud574\uc11c \ubcf4\uc5ec\uc8fc\ub294 \ub290\ub08c\uc774 \ub4ed\ub2c8\ub2e4.<\/li>\n<\/ul>\n<h3>Projection View \uc608\uc2dc<\/h3>\n<p><a href=\"https:\/\/www.charlezz.com\/?attachment_id=43775\" rel=\"attachment wp-att-43775\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2018\/12\/charles-2019-12-21-\uc624\ud6c4-5.21.46-844x1024.png\" alt=\"\" width=\"750\" height=\"910\" class=\"aligncenter size-large wp-image-43775\" srcset=\"https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2018\/12\/charles-2019-12-21-\uc624\ud6c4-5.21.46-844x1024.png 844w, https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2018\/12\/charles-2019-12-21-\uc624\ud6c4-5.21.46-247x300.png 247w, https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2018\/12\/charles-2019-12-21-\uc624\ud6c4-5.21.46-768x932.png 768w, https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2018\/12\/charles-2019-12-21-\uc624\ud6c4-5.21.46.png 1630w\" sizes=\"(max-width: 750px) 100vw, 750px\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<h3>Orthographic View \uc608\uc2dc<\/h3>\n<p><a href=\"https:\/\/www.charlezz.com\/?attachment_id=43776\" rel=\"attachment wp-att-43776\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2018\/12\/charles-2019-12-21-\uc624\ud6c4-5.22.02-871x1024.png\" alt=\"\" width=\"750\" height=\"882\" class=\"aligncenter size-large wp-image-43776\" srcset=\"https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2018\/12\/charles-2019-12-21-\uc624\ud6c4-5.22.02-871x1024.png 871w, https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2018\/12\/charles-2019-12-21-\uc624\ud6c4-5.22.02-255x300.png 255w, https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2018\/12\/charles-2019-12-21-\uc624\ud6c4-5.22.02-768x902.png 768w, https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2018\/12\/charles-2019-12-21-\uc624\ud6c4-5.22.02.png 1634w\" sizes=\"(max-width: 750px) 100vw, 750px\" \/><\/a><\/p>\n<p>\ubc31\ubb38\uc774 \ubd88\uc5ec\uc77c\uacac, \ucc28\uc774\uac00 \ub290\uaef4\uc9c0\uc2dc\ub098\uc694?<\/p>\n<p>\uc544\uc9c1 \uc798 \uc640\ub2ff\uc9c0 \uc54a\ub294\ub2e4\uba74 Unity\ub97c \uc124\uce58\ud574\uc11c \uc800\uc640 \uac19\uc774 \ud050\ube0c(Model)\ub97c \ubc30\uce58\ud558\uace0 \uce74\uba54\ub77c(View)\uc758 Projection\uc744 \ubcc0\uacbd\ud574\ubcf4\uc2dc\uae30 \ubc14\ub78d\ub2c8\ub2e4.\u00a0<\/p>\n<h3>MVP\ub9e4\ud2b8\ub9ad\uc2a4 \uc5f0\uc0b0 \ubc29\ubc95<\/h3>\n<p>\uc2e0\uae30\ud558\uba74\uc11c \uac04\ub2e8\ud558\uac8c\ub3c4 MVP\ub9e4\ud2b8\ub9ad\uc2a4\ub294 \uac01 \ub9e4\ud2b8\ub9ad\uc2a4\ub97c \ubaa8\ub450 \uacf1\ud574\uc8fc\uae30\ub9cc \ud558\uba74\ub429\ub2c8\ub2e4. \ub2e8 \uc21c\uc11c\ub294 \uc9c0\ucf1c\uc57c\ud569\ub2c8\ub2e4.\u00a0\ub9e4\uc6b0 \uc911\uc694\ud569\ub2c8\ub2e4.<\/p>\n<table border=\"1\" style=\"border-collapse: collapse; width: 100%;\">\n<tbody>\n<tr>\n<td style=\"width: 100%;\">\n<p style=\"text-align: center;\">MVPMatrix = Projection * View * Model<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>MVP\ub9e4\ud2b8\ub9ad\uc2a4\ub97c \uc774\uc6a9\ud558\uc5ec \ucc0c\uadf8\ub7ec\uc9c4 \uc0bc\uac01\ud615 \ubc14\ub85c \ub098\ud0c0\ub0b4\uae30<\/h3>\n<p><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2018\/12\/coordinates-1.png\" alt=\"\" width=\"786\" height=\"300\" class=\"aligncenter size-full wp-image-975\" srcset=\"https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2018\/12\/coordinates-1.png 786w, https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2018\/12\/coordinates-1-300x115.png 300w, https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2018\/12\/coordinates-1-768x293.png 768w\" sizes=\"(max-width: 786px) 100vw, 786px\" \/><\/p>\n<p><span style=\"font-size: 14pt;\"><em>\uc67c\ucabd\uc740 OpenGL\uc758 \uae30\ubcf8\uc801\uc778 \uc88c\ud45c\uacc4\uc774\uace0, \uc624\ub978\ucabd\uc740 \uc548\ub4dc\ub85c\uc774\ub4dc\uc758 \uc2a4\ud06c\ub9b0 \ube44\uc728\uc5d0 \uc88c\ud45c\uacc4\ub97c \ub9e4\ud551\ud55c \ubaa8\uc2b5.<\/em><\/span><\/p>\n<p>\uba3c\uc800 \uc0bc\uac01\ud615\uc744 \uadf8\ub9ac\uae30\uc804\uc5d0 \uac00\uc815\uc744 \ud558\uaca0\uc2b5\ub2c8\ub2e4.<\/p>\n<ul>\n<li>\uc0bc\uac01\ud615\uc740 \uc6d0\uc810\uc5d0 \uc874\uc7ac \ud569\ub2c8\ub2e4. \uadf8\ub7ec\ubbc0\ub85c Model \ud589\ub82c\uc740 \ub530\ub85c \uc5f0\uc0b0\ud560 \ud544\uc694 \uc5c6\uc774 \ub2e8\uc704\ud589\ub82c\ub85c \uc9c0\uc815\ud569\ub2c8\ub2e4.\u00a0<\/li>\n<li>\uce74\uba54\ub77c\ub3c4 \uc6d0\uc810\uc5d0 \uc788\uc73c\uba74 \uc0bc\uac01\ud615\uc744 \ubcf4\uae30 \ud798\ub4dc\ubbc0\ub85c \uce74\uba54\ub77c\ub294 z\ucd95\uc73c\ub85c \uc77c\uc815\uac70\ub9ac \ub9cc\ud07c \ub5bc\uc5b4 \ub450\uaca0\uc2b5\ub2c8\ub2e4.<\/li>\n<li>\ud504\ub85c\uc81d\uc158 \ub9e4\ud2b8\ub9ad\uc2a4\ub294 Perspective\ub85c \ub9cc\ub4e4\uaca0\uc2b5\ub2c8\ub2e4.<\/li>\n<\/ul>\n<p>\ub9e4\ud2b8\ub9ad\uc2a4 Model,View,Projection\uc5d0 \ud574\ub2f9\ud558\ub294 \ud589\ub82c 3\uac1c\ub97c \ub9cc\ub4ed\ub2c8\ub2e4.<\/p>\n<pre class=\"lang:java decode:true\">private final float[] projectionMatrix = new float[16];\r\nprivate final float[] viewMatrix = new float[16];\r\nprivate final float[] modelMatrix = new float[16];<\/pre>\n<p>Model\uc744 \ud3ec\ud568\ud55c \ub098\uba38\uc9c0 \ub9e4\ud2b8\ub9ad\uc2a4\ub3c4 \ub2e8\uc704 \ud589\ub82c\ub85c \ucd08\uae30\ud654 \ud569\ub2c8\ub2e4.<\/p>\n<pre class=\"lang:java decode:true\">Matrix.setIdentityM(projectionMatrix, 0);\r\nMatrix.setIdentityM(viewMatrix, 0);\r\nMatrix.setIdentityM(modelMatrix, 0);<\/pre>\n<p>View\ub9e4\ud2b8\ub9ad\uc2a4\uc640 Projection \ub9e4\ud2b8\ub9ad\uc2a4\ub97c \uad6c\ud574\ubcf4\ub3c4\ub85d \ud558\uaca0\uc2b5\ub2c8\ub2e4.<\/p>\n<pre class=\"lang:java decode:true\">@Override\r\npublic void onSurfaceChanged(GL10 gl, int width, int height) {\r\n    GLES20.glViewport(0,0,width, height); \/\/ \ubdf0\ud3ec\ud2b8\ub97c \uc804\uccb4\ud654\uba74\uc73c\ub85c \ub9de\ucda4\r\n    float aspectRatio = (float) width\/ height; \/\/ \uac00\ub85c \uc138\ub85c \ube44\uc728\uc744 \uad6c\ud568\r\n    Matrix.perspectiveM(projectionMatrix,0 , 60, aspectRatio, 1, 7);\r\n    Matrix.setLookAtM(viewMatrix, 0,\r\n            0.0f, 0.0f, -2.0f,\r\n            0.0f, 0.0f, 0.0f,\r\n            0.0f, 1.0f, 0.0f);\r\n    \/\/ mvp = p * v * m (\uacf1\ud558\ub294 \uc21c\uc11c \uc911\uc694\ud568)\r\n    Matrix.multiplyMM(vpMatrix, 0, projectionMatrix, 0, viewMatrix, 0);\r\n}<\/pre>\n<p>\ubdf0\ud3ec\ud2b8 \uc124\uc815\uc744 \ud1b5\ud574 \uc804\uccb4\ud654\uba74\uc744 \uc124\uc815\ud558\uace0, \uc2a4\ud06c\ub9b0\uc758 \uac00\ub85c\uc138\ub85c \ube44\uc728\uc744 \uad6c\ud574\ub461\ub2c8\ub2e4.<\/p>\n<p>Perspective \ud0c0\uc785\uc758 Projection Matrix\ub97c \uad6c\ud558\uae30 \uc704\ud574 <strong>\u00a0Matrix.perspectiveM(&#8230;)<\/strong> \uba54\uc18c\ub4dc\ub97c \uc801\uc6a9\ud558\uaca0\uc2b5\ub2c8\ub2e4.<br \/>\n\uccab\ubc88\uc9f8 \uc778\uc790\ub294 \ub9e4\ud2b8\ub9ad\uc2a4\uc774\uace0,<br \/>\n\ub450\ubc88\uc9f8 \uc778\uc790\ub294 \ub9e4\ud2b8\ub9ad\uc2a4 offset\uc785\ub2c8\ub2e4<br \/>\n\uc138\ubc88\uc9f8 \uc778\uc790\ub294 Field of View \uc774\uba70, \uc0ac\ub78c\uc73c\ub85c \uce58\uba74 \ubcfc\uc218\uc788\ub294 \uc2dc\uc57c\ud3ed\uc785\ub2c8\ub2e4. \uc77c\ubc18\uc801\uc73c\ub85c \uc0ac\ub78c\ub208\uacfc \ube44\uc2b7\ud558\uac8c \ubcf4\ub824\uba74 60\uc815\ub3c4\uac00 \uc801\ub2f9\ud569\ub2c8\ub2e4. \ubc18\ub4dc\uc2dc 60\uc77c \ud544\uc694\ub294 \uc5c6\uc2b5\ub2c8\ub2e4.<br \/>\n\ub124\ubc88\uc9f8 \uc778\uc790\ub294 \ud504\ub85c\uc81d\uc158\ub9e4\ud2b8\ub9ad\uc2a4\uc758 \uac00\ub85c\uc138\ub85c \ube44\uc728\uc778\ub370, \uc544\uae4c \uad6c\ud574\ub454 \uc2a4\ud06c\ub9b0\uc758 \uac00\ub85c\uc138\ub85c \ube44\uc728\uc744 \uc801\uc6a9\ud558\uc5ec \ucc0c\uadf8\ub7ec\uc9c4 \ud654\uba74\uc744 \ud504\ub85c\uc81d\uc158\uc744 \uba54\ud2b8\ub9ad\uc2a4\uc758 \ube44\uc728\uc744 \ud1b5\ud574 \ubcf4\uc644(?)\ud569\ub2c8\ub2e4<br \/>\n\ub2e4\uc12f\ubc88\uc9f8\uc640 \uc5ec\uc12f\ubc88\uc9f8 \uc778\uc790\ub294 near, far\uc778\ub370 \uce74\uba54\ub77c\uac00 \ubcfc\uc218 \uc788\ub294 \uac70\ub9ac\ub97c \ub73b\ud569\ub2c8\ub2e4. \uc801\ub2f9\ud788 \uc9c0\uc815\ud569\ub2c8\ub2e4.<\/p>\n<p>\uc774\ub807\uac8c Projection Matrix\ub294 \uad6c\ud574\uc84c\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\ub2e4\uc74c View Matrix\ub97c \ubcf4\uaca0\uc2b5\ub2c8\ub2e4.<\/p>\n<p><strong>Matrix.setLookAtM(&#8230;)<\/strong>\uc774\ub77c\ub294 \ud568\uc218\ub97c \ud1b5\ud574 View Matrix\ub97c \uad6c\ud560\uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\uccab\ubc88\uc9f8 \uc778\uc790\ub294 \ub9e4\ud2b8\ub9ad\uc2a4<br \/>\n\ub450\ubc88\uc9f8 \uc778\uc790\ub294 \ub9e4\ud2b8\ub9ad\uc2a4 offset\uc785\ub2c8\ub2e4.<br \/>\n\uc138\ubc88\uc9f8\ubd80\ud130 \ub2e4\uc12f\ubc88\uc9f8\uae4c\uc9c0\ub294 eye\uc778\ub370\uc694 \uce74\uba54\ub77c\uc758 \uc704\uce58\uc785\ub2c8\ub2e4.<br \/>\n\uc5ec\uc12f\ubc88\uc9f8\ubd80\ud130 \uc5ec\ub35f\ubc88\uc9f8\uae4c\uc9c0\ub294 center\uc785\ub2c8\ub2e4. \uce74\uba54\ub77c\uc758 \ub208\uc774 \ubc14\ub77c\ubcf4\ub294 \uc704\uce58\uc785\ub2c8\ub2e4.<br \/>\n\uc544\ud649\ubc88\uc9f8\ubd80\ud130 11\ubc88\uc9f8\uae4c\uc9c0\ub294 up\ubca1\ud130\uc785\ub2c8\ub2e4. \uce74\uba54\ub77c\uc758 \uc704\ucabd \ubc29\ud5a5\uc744 \ub73b\ud558\uba70, (0,1,0) \uc774\uba74 y\ucd95 \ubc29\ud5a5\uc73c\ub85c \uce74\uba54\ub77c\ub97c \uc704\ub85c \ud558\uac8c \ub429\ub2c8\ub2e4.\u00a0<\/p>\n<p>\ub2e4\uc74c \uc774\ubbf8\uc9c0\ub97c \ucc38\uace0\ud558\uc2dc\uba74 \uc774\ud574\ud558\uae30\uac00 \uc218\uc6d4\ud560\uac83\uc785\ub2c8\ub2e4.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2018\/12\/gluLookAt_camera.png\" alt=\"\" width=\"520\" height=\"326\" class=\"aligncenter size-full wp-image-969\" srcset=\"https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2018\/12\/gluLookAt_camera.png 520w, https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2018\/12\/gluLookAt_camera-300x188.png 300w\" sizes=\"(max-width: 520px) 100vw, 520px\" \/><\/p>\n<p>\uc548\ub4dc\ub85c\uc774\ub4dc\uc5d0\uc11c \ub450\uac1c\uc758 \ub9e4\ud2b8\ub9ad\uc2a4\ub97c \uacf1\ud558\uae30 \uc704\ud574\uc11c\ub294 Matrix.multiplyMM(&#8230;)\uc744 \uc774\uc6a9\ud569\ub2c8\ub2e4.<\/p>\n<p>\uad6c\ud574\uc9c4 View Matrix\uc640 Projection Matrix\ub97c \uc21c\uc11c\ub97c \uc798 \uc9c0\ucf1c\uc11c \uacf1\ud569\ub2c8\ub2e4. \uc774\ub807\uac8c \uacf1\ud574\uc9c4 VP Matrix\uc5d0 Model Matrix\ub97c \ud55c\ubc88 \ub354 \uacf1\ud558\uba74 MVP Matrix\uac00 \ub418\ub294\uac83\uc774\uc9c0\uc694.<\/p>\n<p>Model(\uc0bc\uac01\ud615)\uc740 \uc6d0\uc810 (0,0,0)\uc5d0 \uc704\uce58\ud558\uae30\ub85c \uc815\ud588\uc73c\ubbc0\ub85c \uadf8\ub300\ub85c \ub2e8\uc704\ud589\ub82c\uc744 \uacf1\ud569\ub2c8\ub2e4. <br \/>\n(\ub2e8\uc704\ud589\ub82c\uc740 \uacf1\ud574\ub3c4 \uadf8\ub300\ub85c \uc774\ubbc0\ub85c \uc0ac\uc2e4 MVP\uc640 VP\ub294 \uac19\uc2b5\ub2c8\ub2e4)<\/p>\n<p>\uc774\ub807\uac8c \uc644\uc131\ub41c MVP Matrix\ub97c \uc774\uc81c \uc815\uc810 \uc250\uc774\ub354\uc5d0 \ub118\uaca8 \uc8fc\uba74 \ub429\ub2c8\ub2e4.<\/p>\n<pre class=\"lang:c++ decode:true \">uniform mat4 uMVPMatrix;\r\nattribute vec4 vPosition;\r\n...\r\nvoid main() {\r\n    ...\r\n    gl_Position = uMVPMatrix * vPosition;\r\n}<\/pre>\n<p>\uc815\uc810\ubca1\ud130\uc640 MVP\ub9e4\ud2b8\ub9ad\uc2a4\ub97c \uacf1\ud558\uba74 \ubcc0\ud658\ub41c \ubca1\ud130(Transformed Vector)\ub97c \uc5bb\uc744\uc218 \uc788\uace0 \uc774\ub97c gl_Position\uc5d0 \ub300\uc785\ud574\uc8fc\uba74 \ub05d\uc785\ub2c8\ub2e4.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2018\/12\/Screenshot_1545818328-1024x576.png\" alt=\"\" width=\"750\" height=\"422\" class=\"aligncenter size-large wp-image-973\" srcset=\"https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2018\/12\/Screenshot_1545818328-1024x576.png 1024w, https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2018\/12\/Screenshot_1545818328-300x169.png 300w, https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2018\/12\/Screenshot_1545818328-768x432.png 768w, https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2018\/12\/Screenshot_1545818328.png 1920w\" sizes=\"(max-width: 750px) 100vw, 750px\" \/><\/p>\n<p><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/www.charlezz.com\/wordpress\/wp-content\/uploads\/2018\/12\/Screenshot_1545818449-1024x576.png\" alt=\"\" width=\"750\" height=\"422\" class=\"aligncenter size-large wp-image-974\" srcset=\"https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2018\/12\/Screenshot_1545818449-1024x576.png 1024w, https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2018\/12\/Screenshot_1545818449-300x169.png 300w, https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2018\/12\/Screenshot_1545818449-768x432.png 768w, https:\/\/charlezz.com\/wordpress\/wp-content\/uploads\/2018\/12\/Screenshot_1545818449.png 1920w\" sizes=\"(max-width: 750px) 100vw, 750px\" \/><\/p>\n<p>\uc9c1\uc0ac\uac01\ud615\uc758 \uc2a4\ud06c\ub9b0 \ube44\uc728 \ub54c\ubb38\uc5d0 \ucc0c\uadf8\ub7ec\uc838 \uc788\ub358 \uc0bc\uac01\ud615\uc774 \ub9e4\ud2b8\ub9ad\uc2a4 \ubcc0\ud658\uc73c\ub85c \uc774\uc058\uac8c \ubcf4\uc785\ub2c8\ub2e4.<\/p>\n<p>\ubcf8 \ud504\ub85c\uc81d\ud2b8\ub294 <a href=\"https:\/\/github.com\/Charlezz\/OpenGLStudy\">github<\/a>\uc5d0\uc11c \ud655\uc778 \uac00\ub2a5\ud569\ub2c8\ub2e4.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\uc0ac\uc2e4 \uc55e\uc11c Homogeneous \uc88c\ud45c\uc640 Matrix\ub97c \uc124\uba85\ud55c \uc774\uc720\ub294 \uc9c0\uae08 \uc54c\uc544\ubcfc MVP Matrix \ub54c\ubb38\uc785\ub2c8\ub2e4. MVP Matrix\ub97c \uc0ac\uc6a9\uc548\ud558\uace0\ub3c4 \ud654\uba74\uc744 \ubb34\uc5b8\uac00 \ud45c\ud604\uc744 \ud560\uc218\ub294 \uc788\uc5c8\uc2b5\ub2c8\ub2e4. \ud558\uc9c0\ub9cc MVP Matrix\ub97c \uc0ac\uc6a9\ud558\uc9c0 \uc54a\ub294 \ub2e4\uba74 \uc624\ube0c\uc81d\ud2b8\uc5d0 \ub300\ud55c \uc774\ub3d9, \ud68c\uc804, \uc2a4\ucf00\uc77c\ub9c1 \uac19\uc740 \ubcc0\ud658 \ub4f1\uc744 \ud1b5\ud55c 3D \uacf5\uac04\uac10\uc744 \uc5bb\uae34 \ud798\ub4e4 \uac83\uc785\ub2c8\ub2e4. MVP Matrix MVP\ub294 Model, View, Projection\uc758 \uc57d\uc790\uc785\ub2c8\ub2e4. &nbsp; \uae00\ub85c\ub294 \uac1c\ub150\uc744 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"inline_featured_image":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0},"categories":[24],"tags":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/posts\/960"}],"collection":[{"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/charlezz.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=960"}],"version-history":[{"count":6,"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/posts\/960\/revisions"}],"predecessor-version":[{"id":43777,"href":"https:\/\/charlezz.com\/index.php?rest_route=\/wp\/v2\/posts\/960\/revisions\/43777"}],"wp:attachment":[{"href":"https:\/\/charlezz.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=960"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/charlezz.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=960"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/charlezz.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=960"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}