{"id":1457,"date":"2011-08-02T09:47:16","date_gmt":"2011-08-02T09:47:16","guid":{"rendered":"http:\/\/www.gisdeveloper.co.kr\/?p=1457"},"modified":"2017-01-27T20:44:51","modified_gmt":"2017-01-27T11:44:51","slug":"android-3d-api-opengl-es-2-%ed%8f%b4%eb%a6%ac%ea%b3%a4-%eb%a0%8c%eb%8d%94%eb%a7%81","status":"publish","type":"post","link":"http:\/\/www.gisdeveloper.co.kr\/?p=1457","title":{"rendered":"[Android] 3D API, OpenGL ES &#8211; 2 : \ud3f4\ub9ac\uace4 \ub80c\ub354\ub9c1"},"content":{"rendered":"<p>\uc774\uc804 \uae00\uc744 \ud1b5\ud574 \uc548\ub4dc\ub85c\uc774\ub4dc\uc5d0\uc11c OpenGL ES\uc5d0 \ub300\ud55c \ucd08\uae30\ud654\uc5d0 \ub300\ud574 \uc0b4\ud3b4\ubcf4\uc558\uc2b5\ub2c8\ub2e4. \uc774 \uae00\uc740 \uac04\ub2e8\ud55c \ud3f4\ub9ac\uace4\uc744 \ud654\uba74\uc0c1\uc5d0 \ub80c\ub354\ub9c1\ud574 \ubcf4\ub294 API\uc5d0 \ub300\ud574 \uc0b4\ud3b4\ubcf4\uaca0\uc2b5\ub2c8\ub2e4. \uac04\ub2e8\ud55c \ud3f4\ub9ac\uace4\uc5d0 \ub300\ud55c \ub80c\ub354\ub9c1\uc744 \uc704\ud574 \uba3c\uc800 \ud3f4\ub9ac\uace4\uc744 \uad6c\uc131\ud558\ub294 \ub370\uc774\ud130\uc5d0 \ub300\ud55c \uac1c\ub150\uc744 \uc0b4\ud3b4\ubcf4\ub3c4\ub85d \ud558\uaca0\uc2b5\ub2c8\ub2e4. <strong>(OpenGL ES\ub97c \ubcf4\uc2dc\uae30 \uc804\uc5d0 \uba3c\uc800 OpenGL\uc744 \uc120\ud589 \ud559\uc2b5\ud558\uc2dc\uba74 \ud6e8\uc52c \uc27d\uac8c \uc774\uae00\uc744 \uc774\ud574\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.)<\/strong><\/p>\n<p><strong>\uc815\uc810(Vertex) : <\/strong>\uc815\uc810\uc740 3D \ubaa8\ub378\uc744 \uad6c\uc131\ud558\ub294 \ucd5c\uc18c \ub2e8\uc704\uc785\ub2c8\ub2e4. \uc815\uc810\uc740 2\uac1c \uc774\uc0c1\uc758 \ubaa8\uc11c\ub9ac(Edge)\uac00 \ub9cc\ub098\ub294 \uc810\uc785\ub2c8\ub2e4. 3D \ubaa8\ub378\uc5d0\uc11c \uc815\uc810\uc740 \ubaa8\ub4e0 \uc5f0\uacb0\ub41c \ubaa8\uc11c\ub9ac\ub098 \uba74(Face) \uadf8\ub9ac\uace0 \ud3f4\ub9ac\uace4 \uc0ac\uc774\uc5d0 \uacf5\uc720\ub429\ub2c8\ub2e4. \ub610\ud55c \uc815\uc810\uc740 \uce74\uba54\ub77c\ub098 \uad11\uc6d0\uc758 \uc704\uce58\ub97c \ub098\ud0c0\ub0b4\ub294\ub370\ub3c4 \uc0ac\uc6a9\ub429\ub2c8\ub2e4. <\/p>\n<p><strong>\ubaa8\uc11c\ub9ac(Edge) : <\/strong>\ubaa8\uc11c\ub9ac\ub294 \ub450\uac1c\uc758 \uc815\uc810\uc744 \uc787\ub294 \uc120\ubd84\uc785\ub2c8\ub2e4. \ubaa8\uc11c\ub9ac\ub294 \uba74\uc774\ub098 \ud3f4\ub9ac\uace4\uc758 \uc678\uacfd\uc120\uc785\ub2c8\ub2e4. 3D \ubaa8\ub378\uc5d0\uc11c \ubaa8\uc11c\ub9ac\ub294 2\uac1c\uc758 \uc778\uc811\ud55c \uba74\uc774\ub098 \ud3f4\ub9ac\uace4 \uc0ac\uc774\uc5d0 \uacf5\uc720\ub429\ub2c8\ub2e4. OpenGL ES\uc5d0\uc11c\ub294 \uc120\ubd84\uc744 \uc815\uc758\ud55c\ub2e4\ub77c\ub294 \uac1c\ub150\ubcf4\ub2e4\ub294 \uc815\uc810\uc744 \uc774\uc6a9\ud574 \uba74\uc744 \uc815\uc758\ud55c\ub2e4\uace0 \ud569\ub2c8\ub2e4. \uba74\uc740 \ucd5c\uc18c 3\uac1c\uc758 \ubaa8\uc11c\ub9ac\ub85c \uad6c\uc131\ub429\ub2c8\ub2e4. <\/p>\n<p><strong>\uba74(Face) : <\/strong>\uba74\uc740 \uc0bc\uac01\ud615\uc785\ub2c8\ub2e4. \uba74\uc740 3\uac1c\uc758 \uc815\uc810\uc73c\ub85c \uad6c\uc131\ub418\uba70 3\uac1c\uc758 \ubaa8\uc11c\ub9ac\ub85c \ub458\ub7ec \uc2f8\uc5ec\uc84c\uc2b5\ub2c8\ub2e4. \uba74\uc758 \uad6c\uc131\uc744 \ubcc0\ud658\ud558\uba74 \ubaa8\ub4e0 \uc5f0\uacb0\ub41c \uc815\uc810\uacfc \ubaa8\uc11c\ub9ac \uadf8\ub9ac\uace0 \ud3f4\ub9ac\uace4\uc5d0 \uc601\ud5a5\uc744 \ubc1b\uc2b5\ub2c8\ub2e4. \uba74\uc744 \uad6c\uc131\ud558\ub294 \uc815\uc810\uc758 \uc9c0\uc815 \uc21c\uc11c\uc5d0 \ub530\ub77c \uba74\uc758 \uc55e\uba74\uacfc \ub4b7\uba74\uc5d0 \ub300\ud55c \uc815\uc758\uac00 \ub2ec\ub77c\uc9d1\ub2c8\ub2e4. \uc55e\uba74\uacfc \ub4b7\uba74\uc774 \uc911\uc694\ud55c \uc774\uc720\ub294 \ud37c\ud3ec\uba3c\uc2a4\uc5d0 \uc788\uc2b5\ub2c8\ub2e4. \ub4b7\uba74\uc740 \ub208\uc5d0 \ub4e4\uc5b4\ub098\uc9c0 \uc54a\uc73c\ubbc0\ub85c \ub80c\ub354\ub9c1\uc5d0\uc11c \uc81c\uc678\ub420 \uc218 \uc788\uae30 \ub54c\ubb38\uc785\ub2c8\ub2e4. \uc815\uc810\uc758 \uc9c0\uc815 \uc21c\uc11c\uc5d0 \ub300\ud574 \uc55e\uba74\uc774\ub0d0 \ub4b7\uba74\uc774\ub0d0\ub97c \uc815\uc758\ud560 \uc218 \uc788\ub294\ub370 glFrontFace \ub9e4\uc11c\ub4dc\ub97c \ud1b5\ud574 \uac00\ub2a5\ud569\ub2c8\ub2e4. \uc815\uc810\uc758 \uc9c0\uc815\uc21c\uc11c\ub294 \uc0bc\uac01\ud615\uc5d0 \ub300\ud574 \ubc18\uc2dc\uacc4 \ubc29\ud5a5 \uc21c\uc11c(CCW)\ub0d0 \uc2dc\uacc4 \ubc29\ud5a5 \uc21c\uc11c(CW)\ub0d0\uc785\ub2c8\ub2e4. OpenGL ES\ub294 \uae30\ubcf8\uc801\uc73c\ub85c \ubc18\uc2dc\uacc4 \ubc29\ud5a5\uc774 \uc55e\uba74\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4.<\/p>\n<p><strong>\ud3f4\ub9ac\uace4(Polygon) : <\/strong>\ud3f4\ub9ac\uace4\uc740 \ud558\ub098\uc758 3D \ubaa8\ub378\uc774\ub77c\uace0 \uc0dd\uac01\ud558\uba74 \ub429\ub2c8\ub2e4. \ud3f4\ub9ac\uace4\uc744 \uad6c\uc131\ud558\uae30 \uc704\ud574\uc11c\ub294 \uc815\uc810\ub4e4\uc758 \ub370\uc774\ud130\uc640 \uc774 \uc815\uc810\ub4e4 \uc911 3\uac1c\ub97c \uc774\uc6a9\ud574 \uba74\uc744 \uad6c\uc131\ud558\uae30 \uc704\ud55c \uc815\uc810 \uc778\ub371\uc2a4 \uc815\ubcf4\ub97c \ud1b5\ud574 \uc774\ub904\uc9d1\ub2c8\ub2e4. \ud3f4\ub9ac\uace4\uc744 \ud654\uba74\uc5d0 \ub80c\ub354\ub9c1\ud558\ub294 \ub9e4\uc11c\ub4dc\ub294 glDrawArrays\uc640 glDrawElements\uc785\ub2c8\ub2e4. \uc774 \ub450 \ud568\uc218\uc758 \uccab\ubc88\uc9f8 \uc778\uc790\ub294 \uc815\uc810\uacfc \uc778\ub371\uc2a4\ub97c \ud1b5\ud574 \uad6c\uc131\ud560 \ubaa8\ub378\uc758 \ud615\ud0dc\uc785\ub2c8\ub2e4. \ub2e4\uc74c\uacfc \uac19\uc774 \ucd1d 7\uac00\uc9c0 \ubaa8\ub4dc\uac00 \uc874\uc7ac\ud569\ub2c8\ub2e4.<\/p>\n<p><strong>1. GL_POINTS :<\/strong> \uc815\uc810\uc744 \uac1c\ubcc4\uc801\uc778 \ud3ec\uc778\ud2b8\ub85c \ub80c\ub354\ub9c1\ud55c\ub2e4.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gisdeveloper.co.kr\/wp-content\/uploads\/1\/1005563974.png\" class=\"aligncenter\" width=\"143\" height=\"201\" alt=\"\uc0ac\uc6a9\uc790 \uc0bd\uc785 \uc774\ubbf8\uc9c0\" \/><br \/><strong>2. GL_LINE_STRIP :<\/strong> \uc815\uc810\uc744 \uc9c0\uc815\ub41c \uc21c\uc11c\ub300\ub85c \uc774\uc5b4 \ub77c\uc778\uc744 \uad6c\uc131\ud574 \ub80c\ub354\ub9c1\ud55c\ub2e4.<img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gisdeveloper.co.kr\/wp-content\/uploads\/1\/1403623814.png\" class=\"aligncenter\" width=\"151\" height=\"198\" alt=\"\uc0ac\uc6a9\uc790 \uc0bd\uc785 \uc774\ubbf8\uc9c0\" \/><br \/><strong>3. GL_LINE_LOOP :<\/strong> GL_LINE_STRIP\uc640 \ub3d9\uc77c\ud558\uace0 \uccab\ubc88\uc9f8\uc640 \ub9c8\uc9c0\ub9c9 \uc815\uc810\uc744 \uc787\ub294\ub2e4.<img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gisdeveloper.co.kr\/wp-content\/uploads\/1\/1214717364.png\" class=\"aligncenter\" width=\"143\" height=\"190\" alt=\"\uc0ac\uc6a9\uc790 \uc0bd\uc785 \uc774\ubbf8\uc9c0\" \/><br \/><strong>4. GL_LINES :<\/strong> \uc815\uc810 2\uac1c\uc529 \uc5f0\uc18d\uc801\uc73c\ub85c \ubb36\uc5b4 \uac1c\ubcc4\uc801\uc778 \uc120\ubd84 \ud558\ub098\uc529 \uad6c\uc131\ud574 \ub80c\ub354\ub9c1\ud55c\ub2e4.<img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gisdeveloper.co.kr\/wp-content\/uploads\/1\/1145593548.png\" class=\"aligncenter\" width=\"142\" height=\"201\" alt=\"\uc0ac\uc6a9\uc790 \uc0bd\uc785 \uc774\ubbf8\uc9c0\" \/><br \/><strong>5. GL_TRIANGLES :<\/strong> \uc815\uc810 3\uac1c\uc529 \uc5f0\uc18d\uc801\uc73c\ub85c \ubb36\uc5b4 \uac1c\ubcc4\uc801\uc778 \uc0bc\uac01\ud615\uc744 \uad6c\uc131\ud574 \ub80c\ub354\ub9c1\ud55c\ub2e4.<img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gisdeveloper.co.kr\/wp-content\/uploads\/1\/1130883485.png\" class=\"aligncenter\" width=\"152\" height=\"248\" alt=\"\uc0ac\uc6a9\uc790 \uc0bd\uc785 \uc774\ubbf8\uc9c0\" \/><br \/><strong>6. GL_TRIANGLE_STRIP :<\/strong> \ucc98\uc74c\uc740 \uc81c\uacf5\ub418\ub294 3\uac1c\uc758 \uc815\uc810\uc73c\ub85c \uc0bc\uac01\ud615\uc744 \uad6c\uc131\ud558\uace0 \ub2e4\uc74c \uc815\uc810 \ud558\ub098\ub97c \ud1b5\ud574 \ub610 \ub2e4\ub978 \uc0bc\uac01\ud615\uc744 \uad6c\uc131\ud55c\ub2e4. \uad6c\uc131\ub418\ub294 \uc0bc\uac01\ud615\ub4e4\uc740 \ubaa8\ub450 \ub3d9\uc77c\ud55c \uba74 \ubc29\ud5a5\uc744 \uac16\ub3c4\ub85d \uad6c\uc131\ud558\uac8c \ub41c\ub2e4.<img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gisdeveloper.co.kr\/wp-content\/uploads\/1\/1006404858.png\" class=\"aligncenter\" width=\"178\" height=\"238\" alt=\"\uc0ac\uc6a9\uc790 \uc0bd\uc785 \uc774\ubbf8\uc9c0\" \/><br \/><strong>7. GL_TRIANGLE_FAN :<\/strong> GL_TRIANGLES_STRIP\uc640 \ube44\uc2b7\ud558\uc9c0\ub9cc \ucc98\uc74c \uc81c\uacf5\ub418\ub294 \uc815\uc810\uc744 \uc911\uc2ec\uc73c\ub85c \ud32c(Fan) \ud615\ud0dc\ub85c \uc0bc\uac01\ud615\uc744 \uad6c\uc131\ud574 \ub80c\ub354\ub9c1\ud55c\ub2e4.<img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gisdeveloper.co.kr\/wp-content\/uploads\/1\/1391094321.png\" class=\"aligncenter\" width=\"183\" height=\"207\" alt=\"\uc0ac\uc6a9\uc790 \uc0bd\uc785 \uc774\ubbf8\uc9c0\" \/><br \/>\uc774\uc81c \uc774\ub7ec\ud55c \uae30\ubcf8 \uc9c0\uc2dd\uc744 \ud1a0\ub300\ub85c OpenGL ES\ub97c \ud1b5\ud574 \uc548\ub4dc\ub85c\uc774\ub4dc\uc5d0\uc11c \uac04\ub2e8\ud55c \uc0ac\uac01\ud615 \ud3f4\ub9ac\uace4 \ubaa8\ub378\uc744 \ub80c\ub354\ub9c1 \ud574\ubcf4\ub294 \ucf54\ub4dc\ub97c \uc791\uc131\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4. \uae30\ubc18\uc774 \ub418\ub294 \ucf54\ub4dc\ub294 \uc774\uc804 \uae00\uc758 \ucd08\uae30\ud654\uc5d0\uc11c \uc791\uc131\ud588\ub358 \ud504\ub85c\uc81d\ud2b8\ub97c \uae30\ubc18\uc73c\ub85c \ud569\ub2c8\ub2e4. \ubcc0\uacbd\ub420 \ubd80\ubd84\uc740 MyRenderer \ud074\ub798\uc2a4\uc640 Square\ub77c\ub294 \uc0c8\ub85c\uc6b4 \ud074\ub798\uc2a4 \ucd94\uac00\uc785\ub2c8\ub2e4. \uba3c\uc800 Square\uc774\ub77c\ub294 \uc0c8\ub85c\uc6b4 \ud074\ub798\uc2a4\ub97c \ucd94\uac00\ud569\ub2c8\ub2e4. <\/p>\n<pre>public class Square { }<\/pre>\n<p>\uc774 \ud074\ub798\uc2a4\ub294 \uc55e\uc5d0\uc11c \uc5b8\uae09\ud588\ub358 \uc0ac\uac01\ud615 \ud3f4\ub9ac\uace4 \ubaa8\ub378\uc5d0 \ub300\ud55c \uc815\uc810\uacfc \uc815\uc810 \uc778\ub371\uc2a4 \uc815\ubcf4\ub97c \ub2f4\uace0 \uc788\uc73c\uba70 \ub80c\ub354\ub9c1\ud558\ub294 \ucf54\ub4dc\uac00 \uc874\uc7ac\ud569\ub2c8\ub2e4. \uad6c\uc131\ud560 \uc0ac\uac01\ud615 \ud3f4\ub9ac\uace4\uc758 \uc815\uc810 \uc88c\ud45c\uc640 \uc778\ub371\uc2a4 \uc815\ubcf4\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gisdeveloper.co.kr\/wp-content\/uploads\/1\/1217481540.png\" class=\"aligncenter\" width=\"410\" height=\"215\" alt=\"\uc0ac\uc6a9\uc790 \uc0bd\uc785 \uc774\ubbf8\uc9c0\" \/><br \/>\uc989.. \ucd1d 4\uac1c\uc758 \uc815\uc810\uc73c\ub85c \uc874\uc7ac\ud558\uba70 \ucd1d 2\uac1c\uc758 \uc0bc\uac01\ud615 \uba74\uc73c\ub85c \uad6c\uc131\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4. 2\uac1c\uc758 \uc0bc\uac01\ud615\uba74\uc744 \uad6c\uc131\ud558\uae30 \uc704\ud574 \uc0ac\uc6a9\ud560 \uc815\uc810\uc5d0 \ub300\ud55c \uc778\ub371\uc2a4\uac00 \ud544\uc694\ud560\ud150\ub370.. \uc774\uc5d0 \ub300\ud55c \uc815\ubcf4\ub97c \ud074\ub798\uc2a4\uc5d0 \ucf54\ub4dc\ub85c \ucd94\uac00\ud569\ub2c8\ub2e4.<\/p>\n<pre>public class Square {\r\n    private float vertices[] = {\r\n        -1.0f,  1.0f, 0.0f,\r\n        -1.0f, -1.0f, 0.0f,\r\n        1.0f, -1.0f, 0.0f,\r\n        1.0f,  1.0f, 0.0f,\r\n    };\r\n \r\n    private short[] indices = { 0, 1, 2, 0, 2, 3 };\r\n}<\/pre>\n<p>vertices\uac00 \uc815\uc810\uc5d0 \ub300\ud55c \uc815\ubcf4\ub97c \ub2f4\uace0 \uc788\uc73c\uba70 indices\uac00 \uc0bc\uac01\ud615 \uba74\uc744 \uad6c\uc131\ud560 \uc815\uc810\uc5d0 \ub300\ud55c \uc778\ub371\uc2a4 \uc815\ubcf4\ub97c \ub2f4\uace0 \uc788\uc2b5\ub2c8\ub2e4. \uc774\uc81c Square\uc758 \uc0dd\uc131\uc790\uc5d0\uc11c \uc774 \uc815\ubcf4\ub97c OpenGL ES\uc5d0\uc11c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub3c4\ub85d Buffer\ub85c \uc800\uc7a5\ud558\ub294 \ucf54\ub4dc\ub97c \uc791\uc131\ud569\ub2c8\ub2e4.<\/p>\n<pre> private FloatBuffer vertexBuffer;\r\n private ShortBuffer indexBuffer;\r\n\r\npublic Square() {\r\n    ByteBuffer vbb = ByteBuffer.allocateDirect(vertices.length * 4);\r\n    vbb.order(ByteOrder.nativeOrder());\r\n    vertexBuffer = vbb.asFloatBuffer();\r\n    vertexBuffer.put(vertices);\r\n    vertexBuffer.position(0);\r\n\r\n    ByteBuffer ibb = ByteBuffer.allocateDirect(indices.length * 2);\r\n    ibb.order(ByteOrder.nativeOrder());\r\n    indexBuffer = ibb.asShortBuffer();\r\n    indexBuffer.put(indices);\r\n    indexBuffer.position(0);\r\n}<\/pre>\n<p>\uc790\ubc14\uc758 NIO\ub97c \uc774\uc6a9\ud574 \ubc30\uc5f4\uc744 ByteBuffer\uc5d0 \ub2f4\uc544 \uc815\uc810\uc5d0 \ub300\ud55c \ubc84\ud37c\ub294 FloatBuffer \ud0c0\uc785\uc758 vertexBuffer\ub85c \uc815\uc810 \uc778\ub371\uc2a4\uc5d0 \ub300\ud55c \ubc84\ud37c\ub294 ShortBuffer \ud0c0\uc785\uc758 indexBuffer\uc5d0 \ub2f4\uc544 \ub193\uc2b5\ub2c8\ub2e4. \uc774\uc81c 3D \ubaa8\ub378\uc5d0 \ub300\ud55c \uc815\uc758\ub294 \ub05d\ub0ac\uace0.. \uc774 \ubaa8\ub378\uc744 \ub80c\ub354\ub9c1\ud574\uc8fc\ub294 \ucf54\ub4dc\ub97c Square\uc5d0 \ucd94\uac00\ud574 \ubcf4\uba74 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.<\/p>\n<pre>public void draw(GL10 gl) {\r\n    gl.glFrontFace(GL10.GL_CCW);\r\n    gl.glEnable(GL10.GL_CULL_FACE);\r\n    gl.glCullFace(GL10.GL_BACK);\r\n  \r\n    gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);\r\n    gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBuffer);\r\n    gl.glDrawElements(GL10.GL_TRIANGLES, indices.length, \r\n        GL10.GL_UNSIGNED_SHORT, indexBuffer);\r\n    gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);\r\n    gl.glDisable(GL10.GL_CULL_FACE);\r\n }<\/pre>\n<p>\uba3c\uc800 2\ubc88 \ucf54\ub4dc\ub294 \uc55e\uba74\uc740 \uc815\uc810 \uc9c0\uc815 \uc21c\uc11c\uac00 \ubc18\uc2dc\uacc4 \ubc29\ud5a5\uc73c\ub85c \uc9c0\uc815\ud55c \uac83\uc774\uace0 3\ubc88 \ucf54\ub4dc\uc640 &nbsp;4\ubc88 \ucf54\ub4dc\ub97c \ud1b5\ud574 \ub4b7\uba74\uc740 \ub80c\ub354\ub9c1\ub418\uc9c0 \uc54a\ub3c4\ub85d \ud569\ub2c8\ub2e4. 6\ubc88 \ucf54\ub4dc\ub294 \uc815\uc810 \ubc30\uc5f4\uc744 \ud1b5\ud574 \ubaa8\ub378\uc744 \ub80c\ub354\ub9c1\ud558\uaca0\ub2e4\uace0 \uc9c0\uc815\ud55c \ucf54\ub4dc\uc774\uba70 7\ubc88 \ucf54\ub4dc\ub294 \ubaa8\ub378\uc758 \uc815\uc810 \ubc30\uc5f4\uc744 \uc9c0\uc815\ud574 \uc8fc\ub294 \ucf54\ub4dc\uc785\ub2c8\ub2e4. 8\ubc88\uc740 \uc2e4\uc81c\ub85c \ub80c\ub354\ub9c1 \uc2dc\ud0a4\ub77c\ub294 \ucf54\ub4dc\ub85c \uc774 \ud568\uc218\uc5d0 \uc815\uc810 \uc778\ub371\uc2a4 \ubc30\uc5f4\uc774 \uc778\uc790\ub85c \ub4e4\uc5b4\uac11\ub2c8\ub2e4. 9\ubc88 \ucf54\ub4dc\ub294 \uc815\uc810 \ubc30\uc5f4\uacfc \uc815\uc810 \uc778\ub371\uc2a4 \ubc30\uc5f4\uc758 \uc9c0\uc815\uc774 \ub05d\ub0ac\uc74c\uc744 \uc54c\ub9bd\ub2c8\ub2e4. \uc774\uc81c \uc774\ub807\uac8c \ub9cc\ub4e4\uc5b4\uc9c4 Square \ud074\ub798\uc2a4\ub97c \uc0ac\uc6a9\ud558\ub294 \uc77c\uc774 \ub0a8\uc558\uc2b5\ub2c8\ub2e4.<\/p>\n<p>MyRenderer \ud074\ub798\uc2a4\uc5d0 Square \ud074\ub798\uc2a4\uc5d0 \ub300\ud55c \ud544\ub4dc \ubcc0\uc218\ub97c \ucd94\uac00\ud558\uace0 onSurfaceCreated \ub9e4\uc11c\ub4dc\uc5d0\uc11c \uc0dd\uc131\ud569\ub2c8\ub2e4.<\/p>\n<pre>public class MyRenderer implements Renderer {\r\n    private Square square;\r\n\r\n    @Override\r\n    public void onSurfaceCreated(GL10 gl, EGLConfig config) {\r\n        square = new Square();\r\n\r\n        gl.glClearColor(0.0f, 0.0f, 0.0f, 1.0f);\r\n        gl.glShadeModel(GL10.GL_SMOOTH);\r\n        gl.glClearDepthf(1.0f);\r\n        gl.glEnable(GL10.GL_DEPTH_TEST);\r\n        gl.glDepthFunc(GL10.GL_LEQUAL);\r\n        gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_NICEST);\r\n    }    \r\n}<\/pre>\n<p>onSurfaceCreated \ub9e4\uc11c\ub4dc\ub97c \ubcf4\uba74 Square \ubcc0\uc218\ub97c \uc0dd\uc131\ud558\ub294 \ucf54\ub4dc \uc774\uc678\uc5d0\ub3c4 OpenGL ES\uc758 \ub2e4\uc591\ud55c \uac12\ub4e4\uc744 \uc9c0\uc815\ud574 \uc8fc\ub294 \ucf54\ub4dc\uac00 \uc874\uc7ac\ud569\ub2c8\ub2e4. \ub2e4\uc74c\uc73c\ub85c MyRenderer \ud074\ub798\uc2a4\uc758 onDrawFrame \ub9e4\uc11c\ub4dc\uc5d0\uc11c square\ub97c \uadf8\ub9ac\ub294 \ucf54\ub4dc\ub97c \uc791\uc131\ud569\ub2c8\ub2e4.<\/p>\n<pre>@Override\r\npublic void onDrawFrame(GL10 gl) {\r\n    gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);\r\n\r\n    gl.glLoadIdentity();\r\n    gl.glTranslatef(0, 0, -10);\r\n    square.draw(gl);\r\n}<\/pre>\n<p>\ud654\uba74\uc0c1\uc5d0 \uc0ac\uac01\ud615 \ubaa8\ub378\uc774 \ubcf4\uc774\ub3c4\ub85d 5\ubc88 \ucf54\ub4dc\uc5d0\uc11c Z\ucd95\uc73c\ub85c -10\ub9cc\ud07c \uc774\ub3d9\ud558\uc600\uc2b5\ub2c8\ub2e4. \uc774\uc5d0 \uc55e\uc11c \ud22c\uc601 \ud589\ub82c\uacfc \ubaa8\ub378\ubdf0 \ud589\ub82c\uc744 \uc9c0\uc815\ud574 \uc918\uc57c \ud558\ub294\ub370.. \uc774 \ucf54\ub4dc\ub294 MyRenderer\uc758 onSurfaceChanged \ub9e4\uc11c\ub4dc\uc5d0\uc11c \uc2e4\ud589\ub429\ub2c8\ub2e4.<\/p>\n<pre>@Override\r\npublic void onSurfaceChanged(GL10 gl, int width, int height) {\r\n    gl.glViewport(0, 0, width, height);\r\n  \r\n    gl.glMatrixMode(GL10.GL_PROJECTION);\r\n    gl.glLoadIdentity();\r\n  \r\n    GLU.gluPerspective(gl, 45.0f, (float)width\/(float)height, 0.1f, 100.0f);\r\n    gl.glMatrixMode(GL10.GL_MODELVIEW);\r\n}<\/pre>\n<p>\uc774\uc81c \uc2e4\ud589\ud574 \ubcf4\uba74 \ub2e4\uc74c\uacfc \uac19\uc740 \uacb0\uacfc\ub97c \uc5bb\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gisdeveloper.co.kr\/wp-content\/uploads\/1\/1249419986.png\" class=\"aligncenter\" width=\"240\" height=\"400\" alt=\"\uc0ac\uc6a9\uc790 \uc0bd\uc785 \uc774\ubbf8\uc9c0\" \/><\/p>\n<p style='text-align:center'><a href=\"http:\/\/www.gisdeveloper.co.kr\/wp-content\/uploads\/1\/1009457607.zip\"><img width='64' src='\/images\/download.svg' \/><\/a><\/p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\uc774\uc804 \uae00\uc744 \ud1b5\ud574 \uc548\ub4dc\ub85c\uc774\ub4dc\uc5d0\uc11c OpenGL ES\uc5d0 \ub300\ud55c \ucd08\uae30\ud654\uc5d0 \ub300\ud574 \uc0b4\ud3b4\ubcf4\uc558\uc2b5\ub2c8\ub2e4. \uc774 \uae00\uc740 \uac04\ub2e8\ud55c \ud3f4\ub9ac\uace4\uc744 \ud654\uba74\uc0c1\uc5d0 \ub80c\ub354\ub9c1\ud574 \ubcf4\ub294 API\uc5d0 \ub300\ud574 \uc0b4\ud3b4\ubcf4\uaca0\uc2b5\ub2c8\ub2e4. \uac04\ub2e8\ud55c \ud3f4\ub9ac\uace4\uc5d0 \ub300\ud55c \ub80c\ub354\ub9c1\uc744 \uc704\ud574 \uba3c\uc800 \ud3f4\ub9ac\uace4\uc744 \uad6c\uc131\ud558\ub294 \ub370\uc774\ud130\uc5d0 \ub300\ud55c \uac1c\ub150\uc744 \uc0b4\ud3b4\ubcf4\ub3c4\ub85d \ud558\uaca0\uc2b5\ub2c8\ub2e4. (OpenGL ES\ub97c \ubcf4\uc2dc\uae30 \uc804\uc5d0 \uba3c\uc800 OpenGL\uc744 \uc120\ud589 \ud559\uc2b5\ud558\uc2dc\uba74 \ud6e8\uc52c \uc27d\uac8c \uc774\uae00\uc744 \uc774\ud574\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.) \uc815\uc810(Vertex) : \uc815\uc810\uc740 3D \ubaa8\ub378\uc744 \uad6c\uc131\ud558\ub294 \ucd5c\uc18c \ub2e8\uc704\uc785\ub2c8\ub2e4. &hellip; <\/p>\n<p class=\"link-more\"><a href=\"http:\/\/www.gisdeveloper.co.kr\/?p=1457\" class=\"more-link\">\ub354 \ubcf4\uae30<span class=\"screen-reader-text\"> &#8220;[Android] 3D API, OpenGL ES &#8211; 2 : \ud3f4\ub9ac\uace4 \ub80c\ub354\ub9c1&#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":[61],"tags":[73,74],"class_list":["post-1457","post","type-post","status-publish","format-standard","hentry","category-android","tag-android","tag-opengl-es"],"_links":{"self":[{"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/posts\/1457","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=1457"}],"version-history":[{"count":1,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/posts\/1457\/revisions"}],"predecessor-version":[{"id":3169,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/posts\/1457\/revisions\/3169"}],"wp:attachment":[{"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1457"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1457"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1457"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}