{"id":674,"date":"2012-06-11T15:38:28","date_gmt":"2012-06-11T06:38:28","guid":{"rendered":"http:\/\/nyatla.jp\/nyartoolkit\/wp\/?p=674"},"modified":"2015-09-13T21:46:10","modified_gmt":"2015-09-13T12:46:10","slug":"nyartoolkit-for-android-%e3%81%ae%e3%83%87%e3%83%a2","status":"publish","type":"post","link":"http:\/\/nyatla.jp\/nyartoolkit\/wp\/?p=674","title":{"rendered":"NyARToolkit for Android \u306e\u30c7\u30e2"},"content":{"rendered":"<p>NyARToolkit for Android\u306e\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u304c\u5287\u7684\u306b\u4e0a\u304c\u3063\u305f\u306e\u3067\u3001NyMmd\u3068\u7d44\u307f\u5408\u308f\u305b\u3066\u3001\u3042\u308a\u304c\u3061\u306a\u30c7\u30e2\u3092\u4f5c\u3063\u3066\u307f\u307e\u3057\u305f\u3002<\/p>\n<p><iframe loading=\"lazy\" src=\"http:\/\/www.youtube.com\/embed\/CXpJ6TuCh60\" frameborder=\"0\" width=\"420\" height=\"315\"><\/iframe><\/p>\n<p>\u306f\u3044\u3002Nyanyanyanyanya!!!\u3067\u3059\u3002\u30e2\u30fc\u30b7\u30e7\u30f3\u3068\u304b\u30e2\u30c7\u30eb\u3068\u304bBGM\u306f\u4f7f\u308f\u3057\u3066\u3082\u3089\u3063\u3066\u307e\u3059\u3002\uff08BGM\u306f\u7de8\u96c6\u3067\u3059\u3002\uff09<\/p>\n<ul>\n<li>BGM\u3010\u521d\u97f3\u30df\u30af\u3011Nyanyanyanyanyanyanya!\u3010\u30aa\u30ea\u30b8\u30ca\u30eb\u30fc\u30d7<a href=\"http:\/\/www.nicovideo.jp\/watch\/sm11509720\">http:\/\/www.nicovideo.jp\/watch\/sm11509720<\/a><\/li>\n<li>PMD \u521d\u97f3\u30df\u30af@\u4e03\u84491052\u5f0f(nh0163.zip)<\/li>\n<li>VMD \u3010MMD\u3011Nyanyanyanyanyanyanya!\u3010\u632f\u308a\u4ed8\u3051\u3057\u3066\u307f\u305f\u3011<a href=\"http:\/\/www.nicovideo.jp\/watch\/sm13350648\">http:\/\/www.nicovideo.jp\/watch\/sm13350648<\/a><\/li>\n<\/ul>\n<p>\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u306f\u3001NyARToolkit for Android 4.0.3\u3068\u3001Android\u5411\u3051\u30c1\u30e5\u30fc\u30cb\u30f3\u30b0\u3057\u305fNyMmd 2.0(trunk)\u3067\u3059\u3002<\/p>\n<p>\u6c17\u306b\u306a\u308b\u52d5\u4f5c\u901f\u5ea6\u306f\u3001Nexus one\u306730fps\u7a0b\u5ea6\u3002Xperia mini\u306750fps\u304f\u3089\u3044\u3067\u3057\u305f\u30021\u4e07\u9802\u70b9\u672a\u6e80\u306e\u30e2\u30c7\u30eb\u3067<span style=\"text-decoration: underline;\">\u7269\u7406\u6f14\u7b97\u7121\u3057<\/span>\u306a\u3089\u3001MMD\u306e\u30e2\u30c7\u30eb\u3092\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u306b\u52d5\u304b\u3057\u3066\u3082\u4f59\u88d5\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n<h2>\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9<\/h2>\n<p>\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u306fNyARToolkit\u306eAndSketch\u3092\u4f7f\u3063\u3066\u66f8\u304d\u307e\u3057\u305f\u306e\u3067\u3001\u5927\u5909\u30b3\u30f3\u30d1\u30af\u30c8\u3067\u3059\u3002<br \/>\nSimpleLite\u306e\u30b3\u30fc\u30c9\u306b\u3001NyMmd\u306e\u521d\u671f\u5316\u51e6\u7406\u3068\u63cf\u753b\u51e6\u7406\u3092\u8db3\u3057\u305f\u3060\u3051\u3067\u3059\u306d\u3002<\/p>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\r\npackage jp.nyatla.andnya3;\r\n\r\nimport javax.microedition.khronos.opengles.GL10;\r\n\r\nimport jp.androidgroup.nyartoolkit.markersystem.*;\r\nimport jp.androidgroup.nyartoolkit.sketch.*;\r\nimport jp.androidgroup.nyartoolkit.utils.camera.CameraPreview;\r\nimport jp.androidgroup.nyartoolkit.utils.gl.*;\r\nimport jp.nyatla.arbozu.R;\r\nimport jp.nyatla.nyartoolkit.markersystem.NyARMarkerSystemConfig;\r\nimport jp.nyatla.nymmd.*;\r\nimport android.content.res.AssetManager;\r\nimport android.hardware.Camera;\r\nimport android.view.ViewGroup.LayoutParams;\r\nimport android.widget.*;\r\n\r\npublic class AndMmdActivity extends AndSketch implements AndGLView.IGLFunctionEvent\r\n{\r\n  CameraPreview _camera_preview;\r\n  AndGLView _glv;\r\n  Camera.Size _cap_size;\r\n  \/**\r\n   * onStart\u3067\u306f\u3001View\u306e\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u3092\u3057\u3066\u304f\u3060\u3055\u3044\u3002\r\n   *\/\r\n  @Override\r\n  public void onStart()\r\n  {\r\n    super.onStart();\r\n    FrameLayout fr=((FrameLayout)this.findViewById(R.id.sketchLayout));\r\n    int sw=this.getWindowManager().getDefaultDisplay().getWidth();\r\n    int sh=this.getWindowManager().getDefaultDisplay().getHeight();\r\n    if(sw&gt;640){\r\n      sw\/=2;\r\n      sh\/=2;\r\n    }\r\n    \/\/\u30ab\u30e1\u30e9\u306e\u53d6\u5f97\r\n    this._camera_preview=new CameraPreview(this);\r\n    this._cap_size=this._camera_preview.getRecommendPreviewSize(sw,sh);\r\n    \/\/\u753b\u9762\u30b5\u30a4\u30ba\u306e\u8a08\u7b97\r\n    int h = this.getWindowManager().getDefaultDisplay().getHeight();\r\n    int screen_w,screen_h;\r\n    screen_w=(this._cap_size.width*h\/this._cap_size.height);\r\n    screen_h=h;\r\n    \/\/camera\r\n    fr.addView(this._camera_preview, 0, new LayoutParams(screen_w,screen_h));\r\n    \/\/GLview\r\n    this._glv=new AndGLView(this);\r\n    fr.addView(this._glv, 0,new LayoutParams(screen_w,screen_h));\r\n  }\r\n  private int _mid;\r\n  AndGLTextLabel text;\r\n  AndGLBox box;\r\n  AndGLFpsLabel fps;\r\n  AndMmdMotionPlayer _player;\r\n  NyARAndMarkerSystem _ms;\r\n  NyARAndSensor _ss;\r\n  public void setupGL(GL10 gl)\r\n  {\r\n    try\r\n    {\r\n      AssetManager assetMng = getResources().getAssets();\r\n      \/\/create sensor controller.\r\n      this._ss=new NyARAndSensor(this._camera_preview,this._cap_size.width,this._cap_size.height,30);\r\n      \/\/create marker system\r\n      this._ms=new NyARAndMarkerSystem(new NyARMarkerSystemConfig(this._cap_size.width,this._cap_size.height));\r\n      this._mid=this._ms.addARMarker(assetMng.open(&quot;AR\/data\/hiro.pat&quot;),16,25,80);\r\n      this._ss.start();\r\n      \/\/setup openGL Camera Frustum\r\n      gl.glMatrixMode(GL10.GL_PROJECTION);\r\n      gl.glLoadMatrixf(this._ms.getGlProjectionMatrix(),0);\r\n\r\n      this._player=new AndMmdMotionPlayer(gl);\r\n      this._player.setPmd(new AndMmdPmdModel(assetMng,&quot;Model\/1052siki.pmd&quot;));\r\n      this._player.setVmd(new AndMmdVmdMotion(assetMng,&quot;Motion\/nyanyanya.vmd&quot;));\r\n\r\n      this._debug=new AndGLDebugDump(this._glv);\r\n      this.text=new AndGLTextLabel(this._glv);\r\n      this.fps=new AndGLFpsLabel(this._glv,&quot;MarkerPlaneActivity&quot;);\r\n      this.box=new AndGLBox(this._glv,1);\r\n      gl.glClearColor(0.0f, 0.0f, 1.0f, 1.0f);\r\n      gl.glEnable(GL10.GL_DEPTH_TEST);\r\n\r\n      gl.glEnable(GL10.GL_BLEND);\r\n      gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);\r\n\r\n      gl.glEnable(GL10.GL_ALPHA_TEST);\r\n      gl.glAlphaFunc(GL10.GL_GEQUAL, 0.05f);\r\n\r\n      float&#x5B;] fLightPos = { 0.45f, 0.55f, 1.0f, 0.0f };\r\n      float&#x5B;] fLightDif = { 0.9f, 0.9f, 0.9f, 0.0f };\r\n      float&#x5B;] fLightAmb = { 1.0f, 1.0f, 1.0f, 0.0f };\r\n      float&#x5B;] fLightSpq = { 0.9f, 0.9f, 0.9f, 0.0f };\r\n      gl.glLightfv(GL10.GL_LIGHT0, GL10.GL_POSITION, fLightPos, 0);\r\n      gl.glLightfv(GL10.GL_LIGHT0, GL10.GL_DIFFUSE, fLightDif, 0);\r\n      gl.glLightfv(GL10.GL_LIGHT0, GL10.GL_AMBIENT, fLightAmb, 0);\r\n      gl.glLightfv(GL10.GL_LIGHT0, GL10.GL_SPECULAR, fLightSpq, 0);\r\n      gl.glEnable(GL10.GL_LIGHT0);\r\n      gl.glEnable(GL10.GL_LIGHTING);\r\n      this.animation_start_time=System.currentTimeMillis();\r\n    } catch (Exception e) {\r\n      \/\/ TODO Auto-generated catch block\r\n      e.printStackTrace();\r\n      this.finish();\r\n    }\r\n  }\r\n  AndGLDebugDump _debug=null;\r\n  private long animation_start_time;\r\n  public void drawGL(GL10 gl)\r\n  {\r\n    try{\r\n      \/\/\u80cc\u666f\u5857\u308a\u6f70\u3057\u8272\u306e\u6307\u5b9a\r\n      gl.glClearColor(0,0,0,0);\r\n      \/\/\u80cc\u666f\u5857\u308a\u6f70\u3057\r\n      gl.glClear(GL10.GL_COLOR_BUFFER_BIT|GL10.GL_DEPTH_BUFFER_BIT);\r\n      if(ex!=null){\r\n        _debug.draw(ex);\r\n        return;\r\n      }\r\n      this._player.updateMotion((System.currentTimeMillis()-this.animation_start_time)%this._player.getTimeLength());\r\n\r\n      synchronized(this._ss){\r\n        this._ms.update(this._ss);\r\n        if(this._ms.isExistMarker(this._mid)){\r\n              this.text.draw(&quot;found&quot;+this._ms.getConfidence(this._mid),0,16);\r\n          gl.glPushMatrix();\r\n          gl.glMatrixMode(GL10.GL_MODELVIEW);\r\n          gl.glEnable(GL10.GL_LIGHTING);\r\n          gl.glLoadIdentity();\r\n          gl.glLoadMatrixf(this._ms.getGlMarkerMatrix(this._mid),0);\r\n          gl.glRotatef(90,1,0,0);\r\n          gl.glScalef(8.0f, 8.0f, -8.0f); \/\/ \u5de6\u624b\u7cfb \u2192 \u53f3\u624b\u7cfb\r\n          this._player.render();\r\n          gl.glPopMatrix();\r\n        }\r\n      }\r\n      fps.draw(0, 0);\r\n    }catch(Exception e)\r\n    {\r\n      ex=e;\r\n    }\r\n  }\r\n  Exception ex=null;\r\n}\r\n<\/pre>\n<p>NyARToolkit for Android\u3068NyMmd\u306e\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u306f\u3001\u4ee5\u4e0b\u306eURL\u304b\u3089\u53d6\u5f97\u3067\u304d\u307e\u3059\u3002<\/p>\n<ul>\n<li>NyARToolkit for Android &#8211; <a href=\"http:\/\/sourceforge.jp\/projects\/nyartoolkit-and\/\">http:\/\/sourceforge.jp\/projects\/nyartoolkit-and\/<\/a><\/li>\n<li>NyMmd &#8211; <a href=\"http:\/\/code.google.com\/p\/nymmd\/\">http:\/\/code.google.com\/p\/nymmd\/<\/a><\/li>\n<\/ul>\n<h2>Source code<\/h2>\n<p title=\"NyARToolkit for Android demo\u306e\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u3068\u4f7f\u3044\u65b9\"><a title=\"NyARToolkit for Android demo\u306e\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u3068\u4f7f\u3044\u65b9\" href=\"http:\/\/nyatla.jp\/nyartoolkit\/wp\/?p=687\">NyARToolkit for Android demo\u306e\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u3068\u4f7f\u3044\u65b9<\/a>\u3067\u516c\u958b\u3057\u307e\u3057\u305f\u3002<\/p>\n<p><iframe src=\"http:\/\/rcm-jp.amazon.co.jp\/e\/cm?lt1=_blank&#038;bc1=000000&#038;IS2=1&#038;bg1=FFFFFF&#038;fc1=000000&#038;lc1=0000FF&#038;t=nyatla-22&#038;o=9&#038;p=8&#038;l=as4&#038;m=amazon&#038;f=ifr&#038;ref=ss_til&#038;asins=B0061X98I0\" style=\"width:120px;height:240px;\" scrolling=\"no\" marginwidth=\"0\" marginheight=\"0\" frameborder=\"0\"><\/iframe><iframe src=\"http:\/\/rcm-jp.amazon.co.jp\/e\/cm?lt1=_blank&#038;bc1=000000&#038;IS2=1&#038;bg1=FFFFFF&#038;fc1=000000&#038;lc1=0000FF&#038;t=nyatla-22&#038;o=9&#038;p=8&#038;l=as4&#038;m=amazon&#038;f=ifr&#038;ref=ss_til&#038;asins=B0037JR3G0\" style=\"width:120px;height:240px;\" scrolling=\"no\" marginwidth=\"0\" marginheight=\"0\" frameborder=\"0\"><\/iframe><iframe src=\"http:\/\/rcm-jp.amazon.co.jp\/e\/cm?lt1=_blank&#038;bc1=000000&#038;IS2=1&#038;bg1=FFFFFF&#038;fc1=000000&#038;lc1=0000FF&#038;t=nyatla-22&#038;o=9&#038;p=8&#038;l=as4&#038;m=amazon&#038;f=ifr&#038;ref=ss_til&#038;asins=4274211746\" style=\"width:120px;height:240px;\" scrolling=\"no\" marginwidth=\"0\" marginheight=\"0\" frameborder=\"0\"><\/iframe><\/p>\n","protected":false},"excerpt":{"rendered":"<p>NyARToolkit for Android\u306e\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u304c\u5287\u7684\u306b\u4e0a\u304c\u3063\u305f\u306e\u3067\u3001NyMmd\u3068\u7d44\u307f\u5408\u308f\u305b\u3066\u3001\u3042\u308a\u304c\u3061\u306a\u30c7\u30e2\u3092\u4f5c\u3063\u3066\u307f\u307e\u3057\u305f\u3002 \u306f\u3044\u3002Nyanyanyanyanya!!!\u3067\u3059\u3002\u30e2\u30fc\u30b7\u30e7\u30f3\u3068\u304b\u30e2\u30c7\u30eb\u3068\u304bBG [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[12,29,13],"tags":[],"_links":{"self":[{"href":"http:\/\/nyatla.jp\/nyartoolkit\/wp\/index.php?rest_route=\/wp\/v2\/posts\/674"}],"collection":[{"href":"http:\/\/nyatla.jp\/nyartoolkit\/wp\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/nyatla.jp\/nyartoolkit\/wp\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/nyatla.jp\/nyartoolkit\/wp\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/nyatla.jp\/nyartoolkit\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=674"}],"version-history":[{"count":8,"href":"http:\/\/nyatla.jp\/nyartoolkit\/wp\/index.php?rest_route=\/wp\/v2\/posts\/674\/revisions"}],"predecessor-version":[{"id":1610,"href":"http:\/\/nyatla.jp\/nyartoolkit\/wp\/index.php?rest_route=\/wp\/v2\/posts\/674\/revisions\/1610"}],"wp:attachment":[{"href":"http:\/\/nyatla.jp\/nyartoolkit\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=674"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/nyatla.jp\/nyartoolkit\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=674"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/nyatla.jp\/nyartoolkit\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=674"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}