{"id":1448,"date":"2011-07-27T05:58:44","date_gmt":"2011-07-27T05:58:44","guid":{"rendered":"http:\/\/www.gisdeveloper.co.kr\/?p=1448"},"modified":"2017-01-27T20:49:46","modified_gmt":"2017-01-27T11:49:46","slug":"android-3d-api-opengl-es-%ec%b4%88%ea%b8%b0%ed%99%94","status":"publish","type":"post","link":"http:\/\/www.gisdeveloper.co.kr\/?p=1448","title":{"rendered":"[Android] 3D API, OpenGL ES &#8211; 1 : \ucd08\uae30\ud654"},"content":{"rendered":"<p>\uc548\ub4dc\ub85c\uc774\ub4dc\uc5d0\uc11c 3\ucc28\uc6d0 \uadf8\ub798\ud53d\uc744 \uc704\ud55c API\ub294 OpenGL ES\uc785\ub2c8\ub2e4. \uaf64 \uc624\ub798\uc804\ubd80\ud130 3\ucc28\uc6d0 \uadf8\ub798\ud53d API\uc778 OpenGL\uc5d0 \ub300\ud574 \uad00\uc2ec\uc774 \ub9ce\uc740 \uc800\ub85c\uc368\ub294 \ubaa8\ubc14\uc77c\uc5d0\uc11c 3D API\uc778 OpenGL ES\uc5d0 \ub300\ud574\uc11c\ub3c4 \uad00\uc2ec\uc774 \ub9ce\uc558\uc2b5\ub2c8\ub2e4. \ud574\uc11c \ubaa8\ubc14\uc77c OS \uc911\uc758 \ud558\ub098\uc774\uba74\uc11c.. \ubaa8\ubc14\uc77c OS \uc911\uc5d0\uc11c \uac00\uc7a5 \uad00\uc2ec\uc774 \ub9ce\uc740 \uc548\ub4dc\ub85c\uc774\ub4dc\uc5d0\uc11c 3D API\uc778 OpenGL ES\uc5d0 \ub300\ud55c \uae00\uc744 \uccb4\uacc4\uc801\uc73c\ub85c \ub0a8\uaca8 \ubcf4\ub824\uace0 \ud569\ub2c8\ub2e4. \uadf8\uc911 \uac00\uc7a5 \uba3c\uc800 \ucd08\uae30\ud654\uc785\ub2c8\ub2e4.<\/p>\n<p>\uc774 \uae00\uc758 \ub300\uc0c1\uc740 \uc548\ub4dc\ub85c\uc774\ub4dc\uc5d0 \ub300\ud55c \uae30\ubcf8\uc801\uc778 \ub0b4\uc6a9(Activity, View\uc758 \uac1c\ub150)\uc5d0 \ub300\ud574 \uc54c\uace0 \uc788\ub294 \uac1c\ubc1c\uc790 \ubd84\uc785\ub2c8\ub2e4. \uc774\ud074\ub9bd\uc2a4\uc5d0\uc11c \uc0c8\ub85c\uc6b4 \uc548\ub4dc\ub85c\uc774\ub4dc \ud504\ub85c\uc81d\ud2b8\ub97c \uc0dd\uc131\ud560 \uc218 \uc788\uc73c\uba70 \uc560\ubbac\ub808\uc774\ud130\uc774\ub4e0.. \uac00\uc9c0\uace0 \uacc4\uc2dc\ub294 \ub514\ubc14\uc774\uc2a4\uc5d0\uc11c\ub4e0.. \uc2e4\ud589\ud574 \uadf8 \uacb0\uacfc\ub97c \uc0b4\ud3b4\ubcf4\uc2e4\uc218 \uc788\ub294 \ubd84\uc5d0 \ud55c\ud569\ub2c8\ub2e4. \uc544\uc6b8\ub7ec OpenGL ES\uac00 \ud1a0\ub300\ub85c \ud558\uace0 \uc788\ub294 OpenGL API\ub97c \uc54c\uace0 \uc788\ub2e4\uba74 \ub9e4\uc6b0 \uc27d\uac8c \uc774 \uae00\uc744 \uc774\ud574\ud558\uc2e4 \uc218 \uc788\uc744 \uac83\uc785\ub2c8\ub2e4. <strong>OpenGL ES\ub97c \ubcf4\uc2dc\uae30 \uc804\uc5d0 \uba3c\uc800 OpenGL\uc744 \uc120\ud589 \ud559\uc2b5\ud558\uc2dc\uba74 \uc774\uae00\uc744 \ud6e8\uc52c \uc27d\uac8c \uc774\ud574\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/strong><\/p>\n<p>\uba3c\uc800 Android Project\ub97c \uc0dd\uc131\ud569\ub2c8\ub2e4. \ub098\ud0c0\ub098\ub294 \ub300\ud654\uc0c1\uc790\uc5d0\uc11c \uc785\ub825\ud574\uc57c\ud560 \uacf3\uc5d0 \uc544\ub798 \uadf8\ub9bc\uc744 \ucc38\uc870\ud574 \uc785\ub825\ud558\uc2dc\uae30 \ubc14\ub78d\ub2c8\ub2e4.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gisdeveloper.co.kr\/wp-content\/uploads\/1\/1036231582.png\" class=\"aligncenter\" width=\"400\" height=\"824\" alt=\"\uc0ac\uc6a9\uc790 \uc0bd\uc785 \uc774\ubbf8\uc9c0\" \/><br \/>\uc704\uc640 \uac19\uc774 \uc785\ub825\ud55c \ub4a4\uc5d0 Finish \ubc84\ud2bc\uc744 \ud074\ub9ad\ud558\uba74 OpenGLES_Tutorial1Activity \ub77c\ub294 \ud074\ub798\uc2a4\uac00 \uc0dd\uc131\ub429\ub2c8\ub2e4. \uc5ec\uae30\uc11c \ub2e4\uc74c\uacfc \uac19\uc774 \ud544\ub4dc \ubcc0\uc218 \ud558\ub098\uc640 onCreate \ub9e4\uc11c\ub4dc\uc758 \ucf54\ub4dc\ub97c \uc218\uc815\ud569\ub2c8\ub2e4.<\/p>\n<pre>package ogl.tutorial1;\r\n\r\nimport android.app.Activity;\r\nimport android.os.Bundle;\r\n\r\npublic class OpenGLES_Tutorial1Activity extends Activity {\r\n    private MyView myView;\r\n \r\n    @Override\r\n    public void onCreate(Bundle savedInstanceState) {\r\n        super.onCreate(savedInstanceState);\r\n        \r\n        myView = new MyView(this);\r\n        \r\n        setContentView(myView);\r\n    }\r\n}<\/pre>\n<p>MyView\ub77c\ub294 View \ud30c\uc0dd \ud074\ub798\uc2a4\ub97c \ud558\ub098 \uc0dd\uc131\ud560 \uac83\uc778\ub370.. \uc0dd\uc131\ud588\ub2e4\uace0 \uac00\uc815\ud558\uace0 \uc77c\ub2e8 \ud544\ub4dc\ub85c\uc368 \uc815\uc758\ud574 onCreate\uc5d0\uc11c \uc0dd\uc131\ud558\uace0 setContentView\ub85c \uc9c0\uc815\ud588\uc2b5\ub2c8\ub2e4. \uc5ec\uae30\uae4c\uc9c0\ub294 \uc548\ub4dc\ub85c\uc774\ub4dc\uc5d0\uc11c \uc77c\ubc18\uc801\uc778 \ud504\ub85c\uc81d\ud2b8\ub97c \uc0dd\uc131\ud558\uace0 \ucf54\ub529\ud558\ub294 \ub0b4\uc6a9\uc785\ub2c8\ub2e4. OpenGL ES\uc758 \ub0b4\uc6a9\uc740 \uc544\uc9c1 \uc5b8\uae09\ub418\uc9c0 \uc54a\uc558\uad6c\uc694. \uc774\uc81c MyView \ud074\ub798\uc2a4 \uc791\uc131\uc5d0\uc11c\ubd80\ud130 OpenGL ES\uac00 \uc2dc\uc791\ub429\ub2c8\ub2e4. MyView\ub77c\ub294 \uc0c8\ub85c\uc6b4 \ud074\ub798\uc2a4\ub97c \uc0dd\uc131\ud569\ub2c8\ub2e4.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gisdeveloper.co.kr\/wp-content\/uploads\/1\/1073774204.png\" class=\"aligncenter\" width=\"400\" height=\"469\" alt=\"\uc0ac\uc6a9\uc790 \uc0bd\uc785 \uc774\ubbf8\uc9c0\" \/><br \/>\uc0c1\uc18d\ubc1b\uc744 Superclass\ub294 android.opengl \ud328\ud0a4\uc9c0\uc758 GLSurfaceView\ub77c\ub294 \uc810\uc774 \uc911\uc694\ud569\ub2c8\ub2e4. \uc774 \ud074\ub798\uc2a4\ub294 View\ub77c\ub294 \ud074\ub798\uc2a4\ub97c \uc0c1\uc18d\ubc1b\ub294 \ud074\ub798\uc2a4\ub85c \ub2e4\uc74c\uacfc \uac19\uc740 \ucc45\uc784\uc744 \uac00\uc9c0\ub294 \ud074\ub798\uc2a4\uc785\ub2c8\ub2e4.<\/p>\n<ul>\n<li>OpenGL ES\uc640 View \uc2dc\uc2a4\ud15c\uc744 \uc5f0\uacb0<\/li>\n<li>\uc11c\ud398\uc774\uc2a4\uc5d0 OpenGL\uc774 \ub80c\ub354\ub9c1 \ub420 \uc218 \uc788\ub3c4\ub85d EGLS Display\ub97c \uad00\ub9ac\ud568<\/li>\n<li>Activity\uc758 \ub77c\uc774\ud504 \uc0ac\uc774\ud074\uacfc \ud568\uaed8 OpenGL ES\uac00 \uc791\ub3d9\ud558\ub3c4\ub85d \ud568<\/li>\n<li>\uc801\ub2f9\ud55c \ud504\ub808\uc784\ubc84\ud37c\uc758 \ud53d\uc140 \ud3ec\ub9f7 \uc120\ud0dd\uc744 \uc27d\uac8c \ud574\uc90c<\/li>\n<li>\ub80c\ub354\ub9c1\uc5d0 \ub300\ud55c \ubcc4\ub3c4\uc758 \uc2a4\ub808\ub4dc\ub97c \ub9cc\ub4e4\uc5b4 \uc90c<\/li>\n<li>OpenGL ES API \ud638\ucd9c\uacfc \uc5d0\ub7ec\uc5d0 \ub300\ud55c \uac80\uc0ac\ub97c \uc704\ud55c \ub514\ubc84\uae45 \ub3c4\uad6c \uc9c0\uc6d0<\/li>\n<\/ul>\n<p>MyView \ud074\ub798\uc2a4\uc5d0 \ud558\ub098\uc758 \ud544\ub4dc \ubcc0\uc218\ub97c \ucd94\uac00\ud558\uace0 \uc0dd\uc131\uc790\ub97c \ub2e4\uc74c\uacfc \uac19\uc774 \ucf54\ub529\ud569\ub2c8\ub2e4.<\/p>\n<pre>public class MyView extends GLSurfaceView {\r\n    private MyRenderer renderer;\r\n\r\n    public MyView(Context context) {\r\n        super(context);\r\n        renderer = new MyRenderer();\r\n        setRenderer(renderer);\r\n    }\r\n\r\n    ....<\/pre>\n<p>MyRenderer\ub77c\ub294 \uc55e\uc73c\ub85c \ucd94\uac00\ud560 \ub610 \ub2e4\ub978 \uc0c8\ub85c\uc6b4 \ud074\ub798\uc2a4\uc5d0 \ub300\ud55c \ub0b4\ubd80 \ud544\ub4dc\ub97c \uc120\uc5b8\ud588\uace0 \uc0dd\uc131\uc790\uc5d0\uc11c \uc774 \ud544\ub4dc\ub97c \uc0dd\uc131\ud55c \ud6c4 setRenderer\ub85c \ub80c\ub354\ub7ec\ub85c\uc368 \uc9c0\uc815\ud588\uc2b5\ub2c8\ub2e4. \uc0c8\ub86d\uac8c \ucd94\uac00\ud560 MyRenderer\ub77c\ub294 \ud074\ub798\uc2a4\ub97c \uc0dd\uc131\ud569\ub2c8\ub2e4.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gisdeveloper.co.kr\/wp-content\/uploads\/1\/1298088653.png\" class=\"aligncenter\" width=\"400\" height=\"469\" alt=\"\uc0ac\uc6a9\uc790 \uc0bd\uc785 \uc774\ubbf8\uc9c0\" \/><br \/>\uad6c\ud604\ud560 Interface\ub97c \uc9c0\uc815\ud574\uc57c \ud558\ub294\ub370.. android.opengl.GLServiceView \ud074\ub798\uc2a4\uc758 Inner Interface\uc778 Renderer \uc778\ud130\ud398\uc774\uc2a4\ub97c \ucd94\uac00\ud569\ub2c8\ub2e4. Finish\ub97c \ud074\ub9ad\ud569\ub2c8\ub2e4. \uc774 Renderer \uc778\ud130\ud398\uc774\uc2a4\uc5d0\uc11c \uad6c\ud604\ud574 \uc918\uc57c \ud558\ub294 \ub9e4\uc11c\ub4dc\ub294 \ucd1d 3\uac00\uc9c0\uc785\ub2c8\ub2e4.<\/p>\n<ul>\n<li>onSufaceCreated &#8211; \ucd08\uae30\ud654 \ucf54\ub4dc \ubd80\ubd84\uc73c\ub85c \ub80c\ub354\ub9c1 \ub420\ub54c \ubcc0\uacbd\ub418\uc9c0 \uc54a\ub294 \uac83\uc5d0 \ub300\ud55c \uc124\uc815 \ucf54\ub4dc\uac00 \uc2e4\ud589\ub418\uba74 \uc801\ud569\ud558\ub2e4. \ud654\uba74\uc744 \uc9c0\uc6b8 \ubc30\uacbd \uc0c9\uc774\ub098 z-buffer\uc5d0 \ub300\ud55c \ud65c\uc131\ud654 \uc5ec\ubd80 \ub4f1\ub4f1<\/li>\n<li>onSurfaceChanged &#8211; \ud654\uba74\uc774 \uac00\ub85c\ub85c \ud68c\uc804\ub420\ub54c \ub4f1\uacfc \uac19\uc774 \ud654\uba74\uc758 \ud06c\uae30\uac00 \ubcc0\uacbd\ub420\ub54c \uc774\uc640 \uad00\ub828\ub41c \ucf54\ub4dc\uac00 \uc2e4\ud589\ub418\uba74 \uc801\ud569\ud558\ub2e4. \uc608\ub97c \ub4e4\uc5b4\uc11c Viewport\uc758 \ud06c\uae30 \uc9c0\uc815\uc774\ub77c\ub4e0\uc9c0 \uce74\uba54\ub77c\uc758 \uc7ac\uc124\uc815 \ucf54\ub4dc \ub4f1\ub4f1<\/li>\n<li>onDrawFrame &#8211; \ud504\ub808\uc784\uc744 \uadf8\ub9ac\ub294 \ucf54\ub4dc\uac00 \uc624\uba74 \uc801\ud569\ud558\ub2e4.<\/li>\n<\/ul>\n<p>\uad6c\ud604\ud574\uc57c\ud560 \ub9e4\uc11c\ub4dc\uc5d0 \ub300\ud574 \ub0b4\uc6a9\uc744 \ud30c\uc545\ud588\uc73c\ub2c8.. \uc774\uc81c MyRenderer\uc5d0 \ub300\ud55c \ucf54\ub4dc\ub97c \uc791\uc131\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4. \uc0c9\uc0c1\uc5d0 \ub300\ud55c RGB\uac12\uc744 \uc704\ud574 3\uac1c\uc758 float \ubcc0\uc218\ub97c \ucd94\uac00\ud558\uace0 \uc55e\uc758 3\uac1c\uc758 \uba54\uc11c\ub4dc\ub97c \uad6c\ud604\ud574 \ubcf4\uba74 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.<\/p>\n<pre>public class MyRenderer implements Renderer {\r\n    private float red = 0.9f;\r\n    private float green = 0.2f;\r\n    private float blue = 0.2f;\r\n\r\n    @Override\r\n    public void onDrawFrame(GL10 gl) {\r\n        gl.glClearColor(red, green, blue, 1.0f);\r\n        gl.glClear(GL10.GL_COLOR_BUFFER_BIT);\r\n    }\r\n\r\n    @Override\r\n    public void onSurfaceChanged(GL10 gl, int width, int height) {\r\n        gl.glViewport(0, 0, width, height);\r\n    }\r\n\r\n    @Override\r\n    public void onSurfaceCreated(GL10 gl, EGLConfig config) {\r\n        \/\/.\r\n    }<\/pre>\n<p>\uc77c\ub2e8.. \uc774\ud574\ub97c \uc27d\uac8c \ud558\uae30 \uc704\ud574 \ub2e8\uc21c\ud788 \ud654\uba74\uc744 red, green, blue \ud544\ub4dc\uac12\uc73c\ub85c \uc9c0\uc815\ub41c \uc0c9\uc0c1\uc73c\ub85c \uc9c0\uc6b0\ub294 \uac83\uc774 \uadf8\ub9ac\ub294 \uac83\uc758 \uc804\ubd80\uc785\ub2c8\ub2e4. \uc989 onDrawFrame\uc5d0\uc11c\ub294 \ubc30\uacbd\uc744 Clear\ud560 \uc0c9\uc0c1\uc744 \uc9c0\uc815\ud558\uae30 \uc704\ud574 glClearColor \ub9e4\uc11c\ub4dc\ub97c \uc0ac\uc6a9\ud588\uace0 \uc2e4\uc81c \uc9c0\uc6b0\ub294 \ud568\uc218\ub294 glClear \uc785\ub2c8\ub2e4. \uadf8\ub9ac\uace0 onSurfaceChanged\uc5d0\uc11c\ub294 \ubdf0\ud3ec\ud2b8\uc758 \ud06c\uae30\ub97c \uc9c0\uc815\ud558\ub294 glViewport\ub97c \ud638\ucd9c\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4. onSurfaceCreated\uc5d0\uc11c\ub294 \ud2b9\ubcc4\ud558 \ubb34\uc5c7\uac00\ub97c \uadf8\ub9ac\ub294 \uac83\uc774 \uc5c6\uae30 \ub54c\ubb38\uc5d0 \ubcc4\ub2e4\ub978 \ucf54\ub4dc\ub294 \uc874\uc7ac\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. \ud558\uc9c0\ub9cc \ubb34\uc5b8\uac00 3D \uc624\ube0c\uc81d\ud2b8\ub97c \uadf8\ub9b4\ub54c \uc774 \ubd80\ubd84\uc5d0 \ucf54\ub4dc\uac00 \ud544\uc694\ud560 \uac83\uc785\ub2c8\ub2e4. \uc2e4\ud589\ud574 \ubcf4\uba74 \ub2e4\uc74c\uacfc \uac19\uc740 \uacb0\uacfc\uac00 \ub098\ud0c0\ub098\uac8c \ub429\ub2c8\ub2e4.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gisdeveloper.co.kr\/wp-content\/uploads\/1\/1300355418.png\" class=\"aligncenter\" width=\"240\" height=\"400\" alt=\"\uc0ac\uc6a9\uc790 \uc0bd\uc785 \uc774\ubbf8\uc9c0\" \/><br \/>\uc5ec\uae30\uc5d0 \uc7a0\uc2dc \uc751\uc6a9\uc744 \ud574\ubcf4\uaca0\uc2b5\ub2c8\ub2e4.. \uc0ac\uc6a9\uc790\uac00 \ud654\uba74\uc5d0 \uc190\uc744 \ub300\uace0 \uc2a4\ud06c\ub864\ud558\uba74 \uc0c9\uc0c1\uc774 \uc2a4\ud06c\ub864\ud55c \ub0b4\uc6a9\uc5d0 \ub530\ub77c \ubcc0\uacbd\ub418\uac8c \ub9d0\uc785\ub2c8\ub2e4. \uc0c9\uc0c1\uc5d0 \ub300\ud55c \uac12\uc774 MyRenderer\uc5d0 \uc815\uc758\ub418\uc5b4 \uc788\uace0.. \uc0ac\uc6a9\uc790\uc758 \uc2a4\ud06c\ub864\uc5d0 \ub300\ud55c \uc774\ubca4\ud2b8\ub294 MyView\uc5d0\uc11c \ubc1c\uc0dd\ud558\ub2c8.. MyRenderer\uc758 \uc0c9\uc0c1\uac12\uc744 \ubcc0\uacbd\ud560 \uc218 \uc788\ub294 \ub9e4\uc11c\ub4dc\ub97c MyRenderer\uc5d0 \ucd94\uac00\ud574\ud574 \uc918\uc57c \ud569\ub2c8\ub2e4.<\/p>\n<pre>public void setColor(float r, float g, float b) {\r\n    red = r;\r\n    green = g;\r\n    blue = b;\r\n}<\/pre>\n<p>\uc774\uc81c MyView\uc5d0 \ud130\uce58 \uc774\ubca4\ud2b8\ub97c \uc791\uc131\ud569\ub2c8\ub2e4.<\/p>\n<pre>public boolean onTouchEvent(final MotionEvent event) {\r\n    queueEvent(new Runnable() {\r\n        public void run() {\r\n            renderer.setColor(\r\n                event.getX()\/getWidth(), event.getY()\/getHeight(), 1.0f\r\n            );\r\n        }\r\n    });\r\n  \r\n    return true;\r\n}<\/pre>\n<p>\ub124.. \ud654\uba74\uc5d0 \uc190\uc744 \ud130\uce58\ud558\uba74 \ud130\uce58\ub41c \uc88c\ud45c\uac12\uc744 \ud1b5\ud574 \uc0c9\uc0c1\uac12\uc744 \uc7ac\uc124\uc815\ud569\ub2c8\ub2e4. OpenGL\uc5d0\uc11c \uc0c9\uc0c1\uac12\uc740 0~1.0\uae4c\uc9c0\uc774\ubbc0\ub85c \uc774 \uac12\uc758 \ubc94\uc704\uc5d0 \ub9de\ucdb0\uc8fc\uace0 \uc788\uc2b5\ub2c8\ub2e4. \uc2e4\ud589\ud574\uc11c \uc190\uc744 \ud130\uce58\ud558\uac70\ub098 \uc2a4\ud06c\ub864\ud574\ubcf4\uba74 \uc0c9\uc0c1\uac12\uc774 \uadf8\uc5d0 \ub530\ub77c \ubcc0\ud558\ub294 \uac83\uc744 \uc0b4\ud3b4\ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p style='text-align:center'><a href=\"http:\/\/www.gisdeveloper.co.kr\/wp-content\/uploads\/1\/1009154690.zip\"><img width='64' src='\/images\/download.svg' \/><\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\uc548\ub4dc\ub85c\uc774\ub4dc\uc5d0\uc11c 3\ucc28\uc6d0 \uadf8\ub798\ud53d\uc744 \uc704\ud55c API\ub294 OpenGL ES\uc785\ub2c8\ub2e4. \uaf64 \uc624\ub798\uc804\ubd80\ud130 3\ucc28\uc6d0 \uadf8\ub798\ud53d API\uc778 OpenGL\uc5d0 \ub300\ud574 \uad00\uc2ec\uc774 \ub9ce\uc740 \uc800\ub85c\uc368\ub294 \ubaa8\ubc14\uc77c\uc5d0\uc11c 3D API\uc778 OpenGL ES\uc5d0 \ub300\ud574\uc11c\ub3c4 \uad00\uc2ec\uc774 \ub9ce\uc558\uc2b5\ub2c8\ub2e4. \ud574\uc11c \ubaa8\ubc14\uc77c OS \uc911\uc758 \ud558\ub098\uc774\uba74\uc11c.. \ubaa8\ubc14\uc77c OS \uc911\uc5d0\uc11c \uac00\uc7a5 \uad00\uc2ec\uc774 \ub9ce\uc740 \uc548\ub4dc\ub85c\uc774\ub4dc\uc5d0\uc11c 3D API\uc778 OpenGL ES\uc5d0 \ub300\ud55c \uae00\uc744 \uccb4\uacc4\uc801\uc73c\ub85c \ub0a8\uaca8 \ubcf4\ub824\uace0 \ud569\ub2c8\ub2e4. \uadf8\uc911 \uac00\uc7a5 \uba3c\uc800 \ucd08\uae30\ud654\uc785\ub2c8\ub2e4. \uc774 \uae00\uc758 \ub300\uc0c1\uc740 \uc548\ub4dc\ub85c\uc774\ub4dc\uc5d0 &hellip; <\/p>\n<p class=\"link-more\"><a href=\"http:\/\/www.gisdeveloper.co.kr\/?p=1448\" class=\"more-link\">\ub354 \ubcf4\uae30<span class=\"screen-reader-text\"> &#8220;[Android] 3D API, OpenGL ES &#8211; 1 : \ucd08\uae30\ud654&#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-1448","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\/1448","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=1448"}],"version-history":[{"count":1,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/posts\/1448\/revisions"}],"predecessor-version":[{"id":3172,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/posts\/1448\/revisions\/3172"}],"wp:attachment":[{"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1448"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1448"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1448"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}