{"id":414,"date":"2010-11-10T03:04:34","date_gmt":"2010-11-09T18:04:34","guid":{"rendered":"http:\/\/nyatla.jp\/nyartoolkit\/wp\/?p=414"},"modified":"2011-12-30T13:39:42","modified_gmt":"2011-12-30T04:39:42","slug":"%e6%ac%a1%e6%9c%9fnyartoolkit%e3%81%ae%e3%82%b5%e3%83%b3%e3%83%97%e3%83%ab%e3%81%ab%e3%81%aa%e3%82%8b%e4%ba%88%e5%ae%9a%e3%81%ae%e3%83%97%e3%83%ad%e3%82%b0%e3%83%a9%e3%83%a0","status":"publish","type":"post","link":"https:\/\/nyatla.jp\/nyartoolkit\/wp\/?p=414","title":{"rendered":"\u6b21\u671fNyARToolKit\u306e\u30b5\u30f3\u30d7\u30eb\u306b\u306a\u308b\u4e88\u5b9a\u306e\u30d7\u30ed\u30b0\u30e9\u30e0"},"content":{"rendered":"<p>\u83ab\u5927\u306a\u91cf\u306e\u30d0\u30b0\u3068\u4ed5\u69d8\u5909\u66f4\u306b\u60a9\u307e\u3055\u308c\u308b\u4eca\u65e5\u3053\u306e\u9803\u3001\u7686\u69d8\u3044\u304b\u304c\u304a\u904e\u3054\u3057\u3067\u3057\u3087\u3046\u304b\u3002\u6b21\u671fNyARToolKit\u306e\u30c6\u30b9\u30c8\u30d7\u30ed\u30b0\u30e9\u30e0\u304c\u3084\u3063\u3068\u66f8\u3051\u308b\u30ec\u30d9\u30eb\u306b\u306a\u3063\u305f\u306e\u3067\u3001\u30c1\u30e9\u898b\u305b\u3002\u66f8\u3051\u308b\u3060\u3051\u3067\u3001\u307e\u3060\u307e\u3060\u52d5\u304b\u306a\u3044\u3051\u308c\u3069\u3002<\/p>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\r\npackage jp.nyatla.nyartoolkit.dev.rpf.reality.nyartk.gl;\r\n\r\nimport java.awt.Frame;\r\nimport java.awt.Insets;\r\nimport java.awt.event.WindowAdapter;\r\nimport java.awt.event.WindowEvent;\r\n\r\nimport javax.media.Buffer;\r\nimport javax.media.opengl.*;\r\nimport javax.media.opengl.glu.GLU;\r\n\r\nimport jp.nyatla.nyartoolkit.NyARException;\r\nimport jp.nyatla.nyartoolkit.core.param.NyARParam;\r\nimport jp.nyatla.nyartoolkit.core.transmat.NyARTransMatResult;\r\nimport jp.nyatla.nyartoolkit.detector.NyARSingleDetectMarker;\r\nimport jp.nyatla.nyartoolkit.dev.rpf.mklib.RawbitSerialIdTable;\r\nimport jp.nyatla.nyartoolkit.dev.rpf.reality.nyartk.NyARRealityTarget;\r\nimport jp.nyatla.nyartoolkit.dev.rpf.reality.nyartk.NyARRealityTargetList;\r\nimport jp.nyatla.nyartoolkit.dev.rpf.realitysource.nyartk.NyARRealitySource_Jmf;\r\nimport jp.nyatla.nyartoolkit.jmf.utils.JmfCaptureDevice;\r\nimport jp.nyatla.nyartoolkit.jmf.utils.JmfCaptureDeviceList;\r\nimport jp.nyatla.nyartoolkit.jmf.utils.JmfCaptureListener;\r\nimport jp.nyatla.nyartoolkit.jogl.utils.NyARGLUtil;\r\n\r\nimport com.sun.opengl.util.Animator;\r\n\r\n\/**\r\n * NyARReality\u30b7\u30b9\u30c6\u30e0\u306e\u30b5\u30f3\u30d7\u30eb\u3002\r\n * \u8907\u6570\u306eID\u30de\u30fc\u30ab\u3092\u540c\u6642\u306b\u533a\u5225\u3059\u308b\u30b5\u30f3\u30d7\u30eb\u3067\u3059\u3002\u540c\u4e00\u753b\u9762\u5185\u306b\u540c\u3058ID\u304c\u8907\u6570\u3042\u3063\u3066\u3082OK\r\n *\r\n * \u30b5\u30f3\u30d7\u30eb\u5b9f\u88c5\u306a\u306e\u3067\u307e\u3060\u5168\u7136\u52d5\u304b\u306a\u3044\u3088\u3002\r\n * @author nyatla\r\n *\r\n *\/\r\npublic class NyARRealityGlTest_CaptureImage implements GLEventListener, JmfCaptureListener\r\n{\r\n\r\n\tprivate final static int SCREEN_X = 640;\r\n\tprivate final static int SCREEN_Y = 480;\r\n\r\n\tprivate Animator _animator;\r\n\tprivate JmfCaptureDevice _capture;\r\n\r\n\tprivate GL _gl;\r\n\tprivate GLU _glu;\r\n\r\n\tprivate Object _sync_object=new Object();\r\n\r\n\tNyARRealityGl _reality;\r\n\tNyARRealitySource_Jmf _src;\r\n\tRawbitSerialIdTable _mklib;\r\n\r\n\tpublic NyARRealityGlTest_CaptureImage(NyARParam i_param) throws NyARException\r\n\t{\r\n\t\tFrame frame = new Frame(&quot;NyARReality on OpenGL&quot;);\r\n\r\n\t\t\/\/ \u30ad\u30e3\u30d7\u30c1\u30e3\u306e\u6e96\u5099\r\n\t\tJmfCaptureDeviceList devlist = new JmfCaptureDeviceList();\r\n\t\tthis._capture = devlist.getDevice(0);\r\n\t\tif (!this._capture.setCaptureFormat(SCREEN_X, SCREEN_Y, 30.0f)) {\r\n\t\t\tthrow new NyARException();\r\n\t\t}\r\n\t\tthis._capture.setOnCapture(this);\r\n\t\t\/\/Reality\u306e\u69cb\u7bc9\r\n\t\ti_param.changeScreenSize(SCREEN_X, SCREEN_Y);\r\n\t\t\/\/\u30ad\u30e3\u30d7\u30c1\u30e3\u753b\u50cf\u3068\u4e92\u63db\u6027\u306e\u3042\u308bRealitySource\u3092\u69cb\u7bc9\r\n\t\tthis._src=new NyARRealitySource_Jmf(this._capture.getCaptureFormat(),1);\r\n\t\t\/\/OpenGL\u4e92\u63db\u306eReality\u3092\u69cb\u7bc9\r\n\t\tthis._reality=new NyARRealityGl(i_param,0.1,100,3,3);\r\n\t\t\/\/\u30de\u30fc\u30ab\u30e9\u30a4\u30d6\u30e9\u30ea(NyId)\u306e\u69cb\u7bc9\r\n\t\tthis._mklib= new RawbitSerialIdTable(10);\r\n\t\t\/\/\u30de\u30fc\u30ab\u30b5\u30a4\u30ba\u30c6\u30fc\u30d6\u30eb\u306e\u4f5c\u6210(\u3068\u308a\u3042\u3048\u305a\u5168\u90e84cm)\r\n\t\tthis._mklib.addAnyItem(40);\r\n\r\n\t\t\/\/ 3D\u3092\u63cf\u753b\u3059\u308b\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\r\n\t\tGLCanvas canvas = new GLCanvas();\r\n\t\tframe.add(canvas);\r\n\t\tcanvas.addGLEventListener(this);\r\n\t\tframe.addWindowListener(new WindowAdapter() {\r\n\t\t\tpublic void windowClosing(WindowEvent e)\r\n\t\t\t{\r\n\t\t\t\tSystem.exit(0);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tframe.setVisible(true);\r\n\t\tInsets ins = frame.getInsets();\r\n\t\tframe.setSize(SCREEN_X + ins.left + ins.right, SCREEN_Y + ins.top + ins.bottom);\r\n\t\tcanvas.setBounds(ins.left, ins.top, SCREEN_X, SCREEN_Y);\r\n\t}\r\n\r\n\tpublic void init(GLAutoDrawable drawable)\r\n\t{\r\n\t\tthis._gl = drawable.getGL();\r\n\t\tthis._gl.glEnable(GL.GL_DEPTH_TEST);\r\n\t\tthis._gl.glClearColor(0.0f, 0.0f, 0.0f, 0.0f);\r\n\t\t\/\/ NyARToolkit\u306e\u6e96\u5099\r\n\t\ttry {\r\n\t\t\t\/\/ \u30ad\u30e3\u30d7\u30c1\u30e3\u958b\u59cb\r\n\t\t\t_capture.start();\r\n\t\t} catch (Exception e) {\r\n\t\t\te.printStackTrace();\r\n\t\t}\r\n\t\tthis._animator = new Animator(drawable);\r\n\t\tthis._animator.start();\r\n\t\treturn;\r\n\t}\r\n\r\n\tpublic void reshape(GLAutoDrawable drawable, int x, int y, int width, int height)\r\n\t{\r\n\t\t_gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);\r\n\t\t_gl.glViewport(0, 0, width, height);\r\n\r\n\t\t\/\/ \u8996\u4f53\u7a4d\u306e\u8a2d\u5b9a\r\n\t\t_gl.glMatrixMode(GL.GL_PROJECTION);\r\n\t\t_gl.glLoadIdentity();\r\n\t\t\/\/ \u898b\u308b\u4f4d\u7f6e\r\n\t\t_gl.glMatrixMode(GL.GL_MODELVIEW);\r\n\t\t_gl.glLoadIdentity();\r\n\t}\r\n\r\n\tprivate double&#x5B;] __display_wk = new double&#x5B;16];\r\n\r\n\tpublic void display(GLAutoDrawable drawable)\r\n\t{\r\n\t\t\/\/RealitySource\u306b\u30c7\u30fc\u30bf\u304c\u51e6\u7406\u3059\u308b\u3002\r\n\t\tif(!this._src.isReady())\r\n\t\t{\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t\/\/ \u80cc\u666f\u3092\u66f8\u304f\r\n\t\tthis._gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT); \/\/ Clear the buffers for new frame.\r\n\t\ttry{\r\n\t\t\tsynchronized(this._sync_object){\r\n\r\n\t\t\t\tNyARGLUtil.drawBackGround(this._glu,this._src._rgb_source, 1.0);\r\n\t\t\t\t\/\/ Projection transformation.\r\n\t\t\t\tthis._gl.glMatrixMode(GL.GL_PROJECTION);\r\n\t\t\t\tthis._gl.glLoadMatrixd(this._reality.refGlFrastumRH(), 0);\r\n\t\t\t\t\/\/\u30bf\u30fc\u30b2\u30c3\u30c8\u30ea\u30b9\u30c8\u3092\u8d70\u67fb\u3057\u3066\u3001\u753b\u9762\u306b\u5185\u5bb9\u3092\u53cd\u6620\r\n\t\t\t\tNyARRealityTargetList tl=this._reality.refTargetList();\r\n\t\t\t\tfor(int i=tl.getLength()-1;i&gt;=0;i--){\r\n\t\t\t\t\tNyARRealityTarget t=tl.getItem(i);\r\n\t\t\t\t\tswitch(t.getTargetType())\r\n\t\t\t\t\t{\r\n\t\t\t\t\tcase NyARRealityTarget.RT_KNOWN:\r\n\t\t\t\t\t\tthis._gl.glMatrixMode(GL.GL_MODELVIEW);\r\n\t\t\t\t\t\t\/\/ Viewing transformation.\r\n\t\t\t\t\t\tthis._gl.glLoadIdentity();\r\n\t\t\t\t\t\t\/\/ \u5909\u63db\u884c\u5217\u3092OpenGL\u5f62\u5f0f\u306b\u5909\u63db(\u3053\u3053\u5c11\u3057\u5909\u3048\u308b\u304b\u3082)\r\n\t\t\t\t\t\tNyARGLUtil.toCameraViewRH(t.refTransformMatrix(), __display_wk);\r\n\t\t\t\t\t\t_gl.glLoadMatrixd(__display_wk, 0);\r\n\t\t\t\t\t\t\/\/ All other lighting and geometry goes here.\r\n\t\t\t\t\t\tdrawCube();\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase NyARRealityTarget.RT_UNKNOWN:\r\n\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tThread.sleep(1);\/\/ \u30bf\u30b9\u30af\u5b9f\u884c\u6a29\u9650\u3092\u4e00\u65e6\u6e21\u3059\r\n\t\t}catch(Exception e){\r\n\t\t\te.printStackTrace();\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t\/**\r\n\t * \u30ab\u30e1\u30e9\u306e\u30ad\u30e3\u30d7\u30c1\u30e3\u3057\u305f\u753b\u50cf\u3092\u975e\u540c\u671f\u306b\u53d7\u3051\u53d6\u308b\u95a2\u6570\u3002\r\n\t * \u753b\u50cf\u3092\u53d7\u3051\u53d6\u308b\u3068\u3001\u540c\u671f\u3092\u53d6\u3063\u3066Reality\u30921\u30b5\u30a4\u30af\u30eb\u9032\u3081\u307e\u3059\u3002\r\n\t *\/\r\n\tpublic void onUpdateBuffer(Buffer i_buffer)\r\n\t{\r\n\t\ttry {\r\n\t\t\tsynchronized (this._sync_object)\r\n\t\t\t{\r\n\t\t\t\tthis._src.setImage(i_buffer);\r\n\t\t\t\tthis._reality.progress(this._src);\r\n\t\t\t\t\/\/UnknownTarget\u30921\u500b\u53d6\u5f97\u3057\u3066\u3001\u9077\u79fb\u3092\u8a66\u3059\u3002\r\n\t\t\t\tNyARRealityTarget t=this._reality.selectSingleUnknownTarget();\r\n\t\t\t\tif(t==null){\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\t\/\/\u30bf\u30fc\u30b2\u30c3\u30c8\u306b\u4e00\u81f4\u3059\u308b\u30c7\u30fc\u30bf\u3092\u691c\u7d22\r\n\t\t\t\tRawbitSerialIdTable.SelectResult r=new RawbitSerialIdTable.SelectResult();\r\n\t\t\t\tif(this._mklib.selectTarget(t,this._src,r)){\r\n\t\t\t\t\t\/\/\u30c6\u30fc\u30d6\u30eb\u306b\u30bf\u30fc\u30b2\u30c3\u30c8\u304c\u898b\u3064\u304b\u3063\u305f\u306e\u3067\u9077\u79fb\u3059\u308b\u3002\r\n\t\t\t\t\tif(!this._reality.changeTargetToKnown(t,r.artk_direction,r.marker_width)){\r\n\t\t\t\t\t\/\/\u9077\u79fb\u306e\u6210\u529f\u30c1\u30a7\u30c3\u30af\r\n\t\t\t\t\t\treturn;\/\/\u5931\u6557\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\/\/\u9077\u79fb\u306b\u6210\u529f\u3057\u305f\u306e\u3067\u3001tag\u306b\u30e6\u30fc\u30b6\u5b9a\u7fa9\u60c5\u5831\u3092\u66f8\u304d\u3053\u3080\u3002\r\n\t\t\t\t\tt.tag=new Long(r.serial);\r\n\t\t\t\t}else{\r\n\t\t\t\t\t\/\/\u4e00\u81f4\u3057\u306a\u3044\u306e\u3067\u3001\u3053\u306e\u30bf\u30fc\u30b2\u30c3\u30c8\u306f\u6368\u3066\u308b\u3002\r\n\t\t\t\t\tthis._reality.changeTargetToDead(t);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} catch (Exception e) {\r\n\t\t\te.printStackTrace();\r\n\t\t}\r\n\t}\r\n\r\n\tpublic void displayChanged(GLAutoDrawable drawable, boolean modeChanged, boolean deviceChanged)\r\n\t{\r\n\t}\r\n\t\/**\r\n\t * \u73fe\u5728\u306e\u4f4d\u7f6e\u306b\u7acb\u65b9\u4f53\u3092\u66f8\u304f\u95a2\u6570\u3067\u3059\u3002\r\n\t *\/\r\n\tvoid drawCube()\r\n\t{\r\n\t\t\/\/ Colour cube data.\r\n\t\tint polyList = 0;\r\n\t\tfloat fSize = 0.5f;\/\/ \u30de\u30fc\u30ab\u30fc\u30b5\u30a4\u30ba\u306b\u5bfe\u3057\u30660.5\u500d\u306a\u306e\u3067\u30014cm\u306e\u7acb\u65b9\u4f53\r\n\t\tint f, i;\r\n\t\tfloat&#x5B;]&#x5B;] cube_vertices = new float&#x5B;]&#x5B;] { { 1.0f, 1.0f, 1.0f }, { 1.0f, -1.0f, 1.0f }, { -1.0f, -1.0f, 1.0f }, { -1.0f, 1.0f, 1.0f }, { 1.0f, 1.0f, -1.0f }, { 1.0f, -1.0f, -1.0f }, { -1.0f, -1.0f, -1.0f }, { -1.0f, 1.0f, -1.0f } };\r\n\t\tfloat&#x5B;]&#x5B;] cube_vertex_colors = new float&#x5B;]&#x5B;] { { 1.0f, 1.0f, 1.0f }, { 1.0f, 1.0f, 0.0f }, { 0.0f, 1.0f, 0.0f }, { 0.0f, 1.0f, 1.0f }, { 1.0f, 0.0f, 1.0f }, { 1.0f, 0.0f, 0.0f }, { 0.0f, 0.0f, 0.0f }, { 0.0f, 0.0f, 1.0f } };\r\n\t\tint cube_num_faces = 6;\r\n\t\tshort&#x5B;]&#x5B;] cube_faces = new short&#x5B;]&#x5B;] { { 3, 2, 1, 0 }, { 2, 3, 7, 6 }, { 0, 1, 5, 4 }, { 3, 0, 4, 7 }, { 1, 2, 6, 5 }, { 4, 5, 6, 7 } };\r\n\r\n\t\tif (polyList == 0) {\r\n\t\t\tpolyList = _gl.glGenLists(1);\r\n\t\t\t_gl.glNewList(polyList, GL.GL_COMPILE);\r\n\t\t\t_gl.glBegin(GL.GL_QUADS);\r\n\t\t\tfor (f = 0; f &lt; cube_num_faces; f++)\r\n\t\t\t\tfor (i = 0; i &lt; 4; i++) {\r\n\t\t\t\t\t_gl.glColor3f(cube_vertex_colors&#x5B;cube_faces&#x5B;f]&#x5B;i]]&#x5B;0], cube_vertex_colors&#x5B;cube_faces&#x5B;f]&#x5B;i]]&#x5B;1], cube_vertex_colors&#x5B;cube_faces&#x5B;f]&#x5B;i]]&#x5B;2]);\r\n\t\t\t\t\t_gl.glVertex3f(cube_vertices&#x5B;cube_faces&#x5B;f]&#x5B;i]]&#x5B;0] * fSize, cube_vertices&#x5B;cube_faces&#x5B;f]&#x5B;i]]&#x5B;1] * fSize, cube_vertices&#x5B;cube_faces&#x5B;f]&#x5B;i]]&#x5B;2] * fSize);\r\n\t\t\t\t}\r\n\t\t\t_gl.glEnd();\r\n\t\t\t_gl.glColor3f(0.0f, 0.0f, 0.0f);\r\n\t\t\tfor (f = 0; f &lt; cube_num_faces; f++) {\r\n\t\t\t\t_gl.glBegin(GL.GL_LINE_LOOP);\r\n\t\t\t\tfor (i = 0; i &lt; 4; i++)\r\n\t\t\t\t\t_gl.glVertex3f(cube_vertices&#x5B;cube_faces&#x5B;f]&#x5B;i]]&#x5B;0] * fSize, cube_vertices&#x5B;cube_faces&#x5B;f]&#x5B;i]]&#x5B;1] * fSize, cube_vertices&#x5B;cube_faces&#x5B;f]&#x5B;i]]&#x5B;2] * fSize);\r\n\t\t\t\t_gl.glEnd();\r\n\t\t\t}\r\n\t\t\t_gl.glEndList();\r\n\t\t}\r\n\r\n\t\t_gl.glPushMatrix(); \/\/ Save world coordinate system.\r\n\t\t_gl.glTranslatef(0.0f, 0.0f, 0.5f); \/\/ Place base of cube on marker surface.\r\n\t\t_gl.glRotatef(0.0f, 0.0f, 0.0f, 1.0f); \/\/ Rotate about z axis.\r\n\t\t_gl.glDisable(GL.GL_LIGHTING); \/\/ Just use colours.\r\n\t\t_gl.glCallList(polyList); \/\/ Draw the cube.\r\n\t\t_gl.glPopMatrix(); \/\/ Restore world coordinate system.\r\n\r\n\t}\r\n\r\n\tprivate final static String PARAM_FILE = &quot;..\/Data\/camera_para.dat&quot;;\r\n\r\n\tpublic static void main(String&#x5B;] args)\r\n\t{\r\n\t\ttry {\r\n\t\t\tNyARParam param = new NyARParam();\r\n\t\t\tparam.loadARParamFromFile(PARAM_FILE);\r\n\t\t\tnew NyARRealityGlTest_CaptureImage(param);\r\n\t\t} catch (Exception e) {\r\n\t\t\te.printStackTrace();\r\n\t\t}\r\n\t\treturn;\r\n\t}\r\n\r\n}\r\n\r\n<\/pre>\n<p>\u3053\u308c\u306f\u30012.5\u7cfb\u306eMultiMarker\u3068\u540c\u7b49\u306e\u6a5f\u80fd\u3092\u5b9f\u88c5\u3057\u305f\u3001NyARReality\u30b7\u30b9\u30c6\u30e0\u306e\u5b9f\u8a3c\u5b9f\u9a13\u30d7\u30ed\u30b0\u30e9\u30e0\u3067\u3059\u3002\u8907\u6570\u306eID\u30de\u30fc\u30ab\uff08\u540c\u3058\u753b\u9762\u5185\u306b\u540c\u4e00ID\u304c\u3042\u3063\u3066\u3082OK\uff09\u3092\u7ba1\u7406\u3057\u3066\u3001\u30e6\u30fc\u30b6\u304c\u30a2\u30af\u30bb\u30b9\u53ef\u80fd\u306a\u30de\u30fc\u30abReality\u3092\u63d0\u4f9b\u3057\u307e\u3059\u3002<\/p>\n<p>\u5927\u4f53\u306e\u6d41\u308c\u306f\u3001\u307e\u305a\u30de\u30fc\u30ab\u5019\u88dc\u3092\u9069\u5f53\u306b\u8b58\u5225\u3057\u3066\u3001\u672a\u77e5\u306e\u30bf\u30fc\u30b2\u30c3\u30c8\u3068\u3057\u3066\u30c8\u30e9\u30c3\u30ad\u30f3\u30b0\u3002\u305d\u306e\u5f8c\u9069\u5f53\u306a\u30bf\u30a4\u30df\u30f3\u30b0\u3067\u3001\u5916\u90e8\u60c5\u5831\u3092\u5143\u306b\u65e2\u77e5\u306e\u30de\u30fc\u30ab\u30fc\u30bf\u30fc\u30b2\u30c3\u30c8\u306b\u5909\u63db\u3002\u65e2\u77e5\u306e\u30de\u30fc\u30ab\u30bf\u30fc\u30b2\u30c3\u30c8\u306f\u3001\u30bf\u30fc\u30b2\u30c3\u30c8\u306b\u95a2\u3059\u308b\u74b0\u5883\u60c5\u5831\u3092\u30e6\u30fc\u30b6\u306b\u63d0\u4f9b\u3059\u308b\u2026\u3002\u307f\u305f\u3044\u306a\u611f\u3058\u3067\u3059\u3002<\/p>\n<p>\u30bf\u30fc\u30b2\u30c3\u30c8\u306e\u6d88\u5931\u3068\u767a\u751f\u7ba1\u7406\u306fNyARReality\u304c\u81ea\u52d5\u3067\u884c\u3046\u306e\u3067\u3001\u30e6\u30fc\u30b6\u306f\u767a\u751f\u3068\u6d88\u5931\u306e\u30bf\u30a4\u30df\u30f3\u30b0\u306b\u5408\u308f\u305b\u3066\u3001\u305d\u306e\u30bf\u30fc\u30b2\u30c3\u30c8\u3092\u4fee\u98fe\u3059\u308b\u5f62\u3067\u5b9f\u88c5\u3092\u884c\u3044\u307e\u3059\u3002\u307e\u305f\u3001\u30bf\u30fc\u30b2\u30c3\u30c8\u306e\u72b6\u614b\u306b\u3088\u308a\u3001\u30bf\u30fc\u30b2\u30c3\u30c8\u306e\u60c5\u5831\uff08\u4f4d\u7f6e\u3001\u8272\u3001\u5468\u8fba\u60c5\u5831\u7b49\uff09\u3092\u5f97\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n<p>\u65b0\u3057\u3044\u30b7\u30b9\u30c6\u30e0\u306f\u3001\u753b\u51e6\u7406\u7cfb\u306b\u3082\u65b0\u624b\u6cd5\u3092\u53d6\u308a\u5165\u308c\u3066\u3044\u308b\u306e\u3067\u3001\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3082\u305d\u3053\u305d\u3053\u826f\u304f\u306a\u308b\u4e88\u5b9a\u3002\u5b9f\u969b\u306b\u52d5\u304b\u3059\u307e\u3067\u6cb9\u65ad\u306f\u3067\u304d\u306a\u3044\u3051\u308c\u3069\u3001\u90e8\u54c1\u5358\u4f4d\u3067\u307f\u305f\u9650\u308a\u3067\u306f\u3001\u5272\u3068\u671f\u5f85\u3067\u304d\u308b\u3068\u601d\u3044\u307e\u3059\u3002<\/p>\n<h2>\u8ffd\u8a18(2010\/11\/13)<\/h2>\n<p>\u30b3\u30fc\u30c9\u9593\u9055\u3063\u3066\u305f\u304b\u3089\u304b\u4fee\u6b63\u3002\u3042\u3068\u3001\u3042\u3068\u4e8c\u6b21\u5143\u7cfb\u307e\u3067\u63a5\u7d9a\u3057\u305f\u753b\u50cf\u8ffd\u52a0\u3002<\/p>\n<p><a href=\"http:\/\/nyatla.jp\/nyartoolkit\/wp\/wp-content\/uploads\/20101113011211.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-416\" title=\"20101113011211\" src=\"http:\/\/nyatla.jp\/nyartoolkit\/wp\/wp-content\/uploads\/20101113011211-300x210.png\" alt=\"\" width=\"300\" height=\"210\" srcset=\"https:\/\/nyatla.jp\/nyartoolkit\/wp\/wp-content\/uploads\/20101113011211-300x210.png 300w, https:\/\/nyatla.jp\/nyartoolkit\/wp\/wp-content\/uploads\/20101113011211.png 450w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u83ab\u5927\u306a\u91cf\u306e\u30d0\u30b0\u3068\u4ed5\u69d8\u5909\u66f4\u306b\u60a9\u307e\u3055\u308c\u308b\u4eca\u65e5\u3053\u306e\u9803\u3001\u7686\u69d8\u3044\u304b\u304c\u304a\u904e\u3054\u3057\u3067\u3057\u3087\u3046\u304b\u3002\u6b21\u671fNyARToolKit\u306e\u30c6\u30b9\u30c8\u30d7\u30ed\u30b0\u30e9\u30e0\u304c\u3084\u3063\u3068\u66f8\u3051\u308b\u30ec\u30d9\u30eb\u306b\u306a\u3063\u305f\u306e\u3067\u3001\u30c1\u30e9\u898b\u305b\u3002\u66f8\u3051\u308b\u3060\u3051\u3067\u3001\u307e\u3060\u307e\u3060\u52d5\u304b\u306a\u3044\u3051\u308c\u3069\u3002 package [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3,13],"tags":[],"_links":{"self":[{"href":"https:\/\/nyatla.jp\/nyartoolkit\/wp\/index.php?rest_route=\/wp\/v2\/posts\/414"}],"collection":[{"href":"https:\/\/nyatla.jp\/nyartoolkit\/wp\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nyatla.jp\/nyartoolkit\/wp\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nyatla.jp\/nyartoolkit\/wp\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/nyatla.jp\/nyartoolkit\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=414"}],"version-history":[{"count":6,"href":"https:\/\/nyatla.jp\/nyartoolkit\/wp\/index.php?rest_route=\/wp\/v2\/posts\/414\/revisions"}],"predecessor-version":[{"id":418,"href":"https:\/\/nyatla.jp\/nyartoolkit\/wp\/index.php?rest_route=\/wp\/v2\/posts\/414\/revisions\/418"}],"wp:attachment":[{"href":"https:\/\/nyatla.jp\/nyartoolkit\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=414"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nyatla.jp\/nyartoolkit\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=414"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nyatla.jp\/nyartoolkit\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=414"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}