<string name="server_addr">192.168.86.1</string>¤Î Éôʬ¤ò¾åµ¤ÇÄ´¤Ù¤¿¤â¤Î¤ËÊѹ¹¤·¤Þ¤¹¡£
mRenderer = new ModelRenderer(false, getAssets(), "chair01.mqo", 0.04f);
<string name="camera_name">jp.android_group.artoolkit.hardware.SocketCamera</string>¤ò¡¢
<string name="camera_name">jp.android_group.artoolkit.hardware.Dev1Camera</string>¤ËÊѹ¹¤¹¤ë¡£
ºÙ¤«¤¤ÅÀ¤Ë¤Ä¤¤¤Æ¡¢¥³¡¼¥É¤ò½çÈÖ¤ËÄɤäƤ¤¤¤Þ¤¹¡£
¤³¤ì¤¬¡¢main()¥á¥½¥Ã¥É¤ËÅö¤¿¤ëÉôʬ¤Ç¤¹¡£¤³¤³¤òÆɤà¤È¡¢²¿¤ò¤¹¤ë¤Î¤«¡©¤¬¡¢¤À¤¤¤¿¤¤ÇÄ°®¤Ç¤¤Þ¤¹¡£
ModelRenderer¥¯¥é¥¹¤Ï¡¢³Æ¼ï3D¥â¥Ç¥ë¤òÆɤ߽Ф·¤Æ¡¢ÉÁ²è¤¹¤ë¤¿¤á¤Î¥¯¥é¥¹¤Ç¤¹¡£´ðËÜŪ¤Ë¤Ï¡¢AndroidÅëºÜ¤Î3D¥Á¥Ã¥×¸þ¤±¤ÎÄ´À°¤äÀßÄê¤òÆþ¤ì¹þ¤ó¤Ç¤¤¤Þ¤¹¡£¤Ç¤¹¤Î¤Ç¡¢º£¸å¡¢Androidµ¡¤¬Áý¤¨¤Æ¤¯¤ì¤Ð¡¢¤³¤ì¤ò³ÈÄ¥¤·¤¿¤ê¡¢°ã¤¦¤â¤Î¤òÍÑ°Õ¤·¤¿¤ê¤¹¤ë¤³¤È¤Ë¤Ê¤ê¤Þ¤¹¡£
// Renderer mRenderer = new ModelRenderer(false, getAssets(), "chair01.mqo", 0.04f);
ºÇ½é¤Î°ú¿ô¤Ï¡¢¤³¤¦¤¤¤¦¤â¤Î¤À¤È»×¤Ã¤Æ¤¯¤À¤µ¤¤¡£¥¨¥ß¥å¥ì¡¼¥¿¤ÈDev Phone 1¤Î3D¥¢¥¯¥»¥é¥ì¡¼¥¿¥Á¥Ã¥×¤Î½é´ü²½¥Ñ¥é¥á¡¼¥¿¤ò¤¤¤í¤¤¤í¤ÈÄ´À°¤·¤¿·ë²Ì¡¢Éղ䵤줿¤â¤Î¤Ç¤¹¡£
2¤ÄÌܤΥѥé¥á¡¼¥¿¡ÖgetAssets()¡×¤Ï¡¢¡Öassets¡×¥Ç¥£¥ì¥¯¥È¥êÆâ¤Î¥Ç¡¼¥¿¤òÆɤ߹þ¤à¤¿¤á¤Ë¡¢Android¤ËÍÑ°Õ¤µ¤ì¤¿¥æ¡¼¥Æ¥£¥ê¥Æ¥£¡¼¤Ç¤¹¡£zip¥Õ¥¡¥¤¥ë¤Ê¤É¡¢³°Éô¤Î¥Õ¥¡¥¤¥ë¤«¤éÆɤ߹þ¤à¥Ç¡¼¥¿¤Ï¡¢¤³¤³¤Ë¤ª¤¤¤Æ¤ª¤¯¤Î¤¬¡¢Android»ÅÍͤΤ褦¤Ç¤¹¡£
3¤ÄÌܰʹߤϡ¢É½¼¨¤µ¤»¤ë3D¥ª¥Ö¥¸¥§¥¯¥È¤òÊѹ¹¤¹¤ë¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£
³¤¤¤Æ¡¢¼¡¤Î¹Ô¤Ë
mRenderer.setMainHandler(mHandler);
¤È¤¤¤¦¤â¤Î¤¬¤¢¤ê¤Þ¤¹¡£¤³¤ì¤¾¡¢Android¥Õ¥ì¡¼¥à¥ï¡¼¥¯¡ª¤È¤¤¤¦¤Ù¤¤â¤Î¤Î°ì¤Ä¤Ç¤¹¡£
set¤¹¤ë¤È¤³¤í¤ÏÎɤ¤¤È¤·¤Æ¡¢¤³¤Î¥Ï¥ó¥É¥é¤òÍøÍѤ·¤Æ¤¤¤ë²Õ½ê¤ò¸«¤Æ¤ß¤ë¤È¡¢ModelRenderer#initModel(GL11)Æâ¤Ë¤¢¤ê¤Þ¤¹¡£
if (mainHandler != null) { mainHandler.sendMessage (mainHandler.obtainMessage (NyARToolkitAndroidActivity.SHOW_LOADING)); }
¥Ï¥ó¥É¥é¤ÎHandler#sendMessage()¥á¥½¥Ã¥É¤ò»È¤Ã¤Æ¡¢¡ÖNyARToolkitAndroidActivity.SHOW_LOADING¡×¤òÁ÷¤Ã¤Æ¤¤¤Þ¤¹¡£
¤³¤ì¤¬¡¢¤É¤³¤ËÆϤ¯¤Î¤«¤È¤¤¤¦¤È¡¢NyARToolkitAndroidActivityÆâ¤Ë¤¢¤ê¤Þ¤¹¡£
private class MainHandler extends Handler { @Override public void handleMessage(Message msg) { (ά) case SHOW_LOADING: {¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡ showDialog(DIALOG_LOADING); break; } case HIDE_LOADING: { try { dismissDialog(DIALOG_LOADING); removeDialog(DIALOG_LOADING); } catch (IllegalArgumentException e) { } break; } } } }
¤³¤ÎÃæ¤Ç¡¢¡¤Îcase¤Ë¤è¤ê¡¢¡ÖshowDialog(DIALOG_LOADING)¡×¤¬¸Æ¤Ð¤ì¤Æ¡¢Android¾å¤Ë¤ÏLoading¥À¥¤¥¢¥í¥°¤¬É½¼¨¤µ¤ì¤ë¤È¤¤¤¦Æ°ºî¤Ë¤Ê¤ê¤Þ¤¹¡£
¤Ê¤¼¡¢¤³¤ó¤Ê¤á¤ó¤É¤¯¤µ¤¤¤³¤È¤ò¤¹¤ë¤Î¤«¤È¤¤¤¦¤Î¤Ï¡¢Android¥Õ¥ì¡¼¥à¥ï¡¼¥¯¤Î¥é¥¤¥Õ¥µ¥¤¥¯¥ë¤Ç¡ª
³¤¤¤Æ¡¢ifʸ¤¬Ê¤ó¤Ç¤¤¤Þ¤¹¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦
¤¹¤ß¤Þ¤»¤ó¡¢ËÜÅö¤Ï¡¢¥ê¥Õ¥ì¥¯¥·¥ç¥ó¤Ë¤è¤ê¼èÆÀ¤¹¤ë¤è¤¦¤Ë¤·¤è¤¦¤«¤È»×¤Ã¤¿¤Î¤Ç¤¹¤¬¡¢if¤Çʤ٤Á¤ã¤¤¤Þ¤·¤¿¡£
Android¤Ë¤ª¤±¤ë¥ê¥Õ¥ì¥¯¥·¥ç¥ó¤Ë¤Ä¤¤¤Æ¤Ï¡¢¤³¤Á¤é¤Ë¥µ¥ó¥×¥ë¥³¡¼¥É¤¬¤¢¤ê¤Þ¤¹¤Î¤Ç¡¢»²¾È¤·¤Æ¤¤¤¿¤À¤±¤ì¤Ð¤È»×¤¤¤Þ¤¹¡£ÉáÄ̤ÎJava¤ÈÁ´¤¯°ì½ï¤Ê¤Î¤Ç¡¢ÌäÂê¤Ï¤Ê¤¤¤È»×¤¤¤Þ¤¹¤¬¡£
Dev1Camera¥¯¥é¥¹¤Î¥¤¥ó¥¹¥¿¥ó¥¹²½»þ¤Ë¡¢NyARToolkitAndroidActivity¼«¿È¤òÍ¿¤¨¤Æ¤¤¤Þ¤¹¡£¤Ê¤¼¡¢¤³¤ó¤Ê¤³¤È¤ò¤ä¤ë¤Î¤Ç¤·¤ç¤¦¤«¡©
mCameraDevice = new Dev1Camera(this, mSurfaceView);
¤³¤ì¤³¤½¤¬¡¢Android¥Õ¥ì¡¼¥à¥ï¡¼¥¯¡ª¤Ê¤Î¤Ç¤¹¡£Android¥Õ¥ì¡¼¥à¥ï¡¼¥¯¤Ç¤Ï¡¢¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Î¥é¥¤¥Õ¥µ¥¤¥¯¥ë¤òÄêµÁ¤·¤Æ¤¤¤Þ¤¹¡£¤½¤Î¤¿¤á¡¢Android¥Õ¥ì¡¼¥à¥ï¡¼¥¯¤Î¥é¥¤¥Õ¥µ¥¤¥¯¥ë³°¤Çºî¤é¤ì¤¿¥¤¥ó¥¹¥¿¥ó¥¹¤«¤é¤Ï¡¢View¤Ê¤É¤Ø¥¢¥¯¥»¥¹¤Ç¤¤Ê¤¯¤Ê¤ê¤Þ¤¹¡£
¤³¤ì¤Ë¤è¤ê¡¢ÅÅÃÓ¼÷Ì¿¤¬½ÅÍפʥե¡¥¯¥¿¡¼¤Ç¤¢¤ë¥â¥Ð¥¤¥ëµ¡´ï¤Ë¤ª¤¤¤Æ¤â¡¢¸·Ì©¤ÊÅŸ»´ÉÍý¤ò¤¹¤ë¤³¤È¤¬½ÐÍè¤ëÈ¿ÌÌ¡¢¾åµ¤ä²¼µ¤Î¤è¤¦¤Ë¡¢onCreate()Æâ¤äNyARToolkitAndroidActivity¤Î¥¤¥ó¥¹¥¿¥ó¥¹²½»þ¤Ë°ú¤ÅϤ·¤Æ¤ª¤¯É¬Íפ¬¤¢¤ë¤Î¤Ç¤¹¡£(getter¤äsetter¤Ë¤è¤ëÊýË¡¤ä¥á¥Ã¥»¡¼¥¸¥Ï¥ó¥É¥é¤Ë¤è¤ëÊýË¡¤¬¤¢¤ê¤Þ¤¹¤¬¡¢¤½¤ì¤ò»È¤ï¤Ê¤¤Íýͳ¤Ï¡¢ºÇĹÉÔÅÝ´Ø¿ô¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£)
¤Þ¤¿¡¢Android¤Î¥µ¥ó¥×¥ë¤Ë¤è¤¯½Ð¤Æ¤¯¤ë¡¢²¼µ¤Î¤è¤¦¤Ê¥½¡¼¥¹¥³¡¼¥É¤Ï¡¢¾åµ¤ÎÍýͳ¤ËͳÍ褷¤Æ¤¤¤ë¤È»×¤ï¤ì¤Þ¤¹¡£
mOrientationListener = new OrientationListener(this) { public void onOrientationChanged(int orientation) { mLastOrientation = orientation; } };
¤½¤·¤Æ¡¢Àµ¹¶Ë¡¤ÊÊýË¡¤È¤·¤Æ¥á¥Ã¥»¡¼¥¸¥Ï¥ó¥É¥é¤¬¡¢¤³¤ÎAndroid¥Õ¥ì¡¼¥à¥ï¡¼¥¯¤Î¥é¥¤¥Õ¥µ¥¤¥¯¥ë³°¤Çºî¤é¤ì¤¿¥¤¥ó¥¹¥¿¥ó¥¹¤«¤é¥¢¥¯¥»¥¹¤¹¤ë¤¿¤á¤ËÍÑ°Õ¤µ¤ì¤¿ÊýË¡¤Ê¤Î¤Ç¤¹¡£
²»À¼¥Õ¥¡¥¤¥ë¤òÍ¿¤¨¤ë¤È¡¢¡Ø3D¥ª¥Ö¥¸¥§¥¯¥È¤¬É½¼¨¤µ¤ì¤Æ¤¤¤ë¤È¤¤Ë¤½¤Î²»À¼¥Õ¥¡¥¤¥ë¤òή¤¹¡Ù¤³¤È¤¬¤Ç¤¤ë¡¢¤È¤¤¤¦¤â¤Î¤Ç¤¹¡£
»ÈÍѤ·¤¿¤¤¾ì¹ç¤Ï¡¢²¼µ¤ÎÉôʬ¤ò¥³¥á¥ó¥È¥¢¥¦¥È¤·¡¢¡Öres/raw/¡×¥Ç¥£¥ì¥¯¥È¥ê¤ËºÆÀ¸¤·¤¿¤¤²»À¼¥Õ¥¡¥¤¥ë¤òÆþ¤ì¤Æ¤¯¤À¤µ¤¤¡£
¤Á¤Ê¤ß¤Ë¡¢»È¤¤¤É¤³¤í¤Ï¡¢¡¢¡¢Æâ½ï¤Ç¤¹¡£(;^_^A ¥¢¥»¥¢¥»¡¦¡¦¡¦
//TODO init VoicePlayer for ARToolkit. // VoicePlayer mVoiceSound = new VoicePlayer(); // mVoiceSound.initVoice(getResources().openRawResourceFd(R.raw.xxx_voice)); // arToolkit.setVoicePlayer(mVoiceSound);
¤â¤·¤«¤¹¤ë¤È¡¢²èÌ̤¬·¹¤¤¤Æ¤¤¤Þ¤»¤ó¤«¡©
ËÜÍè¤Ï¡¢¤½¤ì¤òÀ©¸æ¤¹¤ë¤¿¤á¤Ë¤Ï¡¢OrientationListener¥¯¥é¥¹¤òÍøÍѤ·¤Þ¤¹¡£
NyARToolkitAndroidActivity#onCreate(Bundle)Æâ¤Ç¡¢
mOrientationListener = new OrientationListener(this) { public void onOrientationChanged(int orientation) { mLastOrientation = orientation; } };
¤È¡¢¥¤¥ó¥¹¥¿¥ó¥¹²½¤·¤Æ¤¤¤Þ¤¹¡£
¤¬¡¢¤³¤ì¡¢»×¤Ã¤¿¤è¤¦¤ËÆ°¤¤¤Æ¤¯¤ì¤Þ¤»¤ó¡£Dev Phone 1¤ò¡¢Î©¤Æ¤Æ¤¤¤ë¤Ë¤â¤«¤«¤ï¤é¤º¡¢¡Ø²£¡Ù¤ÎȽÄê¤Ë¤Ê¤Ã¤Æ¤·¤Þ¤Ã¤¿¤ê¡¢Æ°¤«¤·¤Æ¤¤¤Ê¤¤¤Î¤Ë¡¢½Ä¤«¤é²£¤Ë¤Ê¤Ã¤Æ¤·¤Þ¤Ã¤¿¤ê¤È¡¢¤¤¤Þ¤¤¤Á¡¢°ÂÄꤷ¤Þ¤»¤ó¡£
¤½¤Î¤¿¤á¡¢º£²ó¤Ï¡¢Æþ¤ì¤Æ¤Ï¤ª¤¤Þ¤·¤¿¤¬¡¢»È¤Ã¤Æ¤¤¤Þ¤»¤ó¡£
͸ú¤Ë¤¹¤ë¤Ë¤Ï¡¢Dev1Camera¥¯¥é¥¹¤Î¥¤¥ó¥Ê¡¼¥¯¥é¥¹¤Ç¤¢¤ëImageCapture#capture()Æâ¤Î
//final int latchedOrientation = NyARToolkitAndroidActivity.roundOrientation(arActivity.getLastOrientation() + 90 ); ¡Êά¡Ë parameters.set("rotation", 90); //parameters.set("rotation", latchedOrientation);
¤Î¥³¥á¥ó¥È¥¢¥¦¥È¤ò¤Ï¤º¤·¤Æ¤â¤é¤¨¤ì¤Ð¡¢OK¤Ç¤¹¡£
°ÂÄꤵ¤»¤é¤ì¤¿Êý¡¢À§È󡢤´Ï¢Íí¤ò¤ª´ê¤¤¤·¤Þ¤¹¡£
¾åµ¤ÎOrientationListener¤Ë¤è¤ë»ÑÀªÀ©¸æ¤Ë¤è¤ê¡¢½Ä²£¤¬ÀÚ¤êÂؤï¤Ã¤¿¥¿¥¤¥ß¥ó¥°¤Ç²èÌ̤Υµ¥¤¥º¤¬(½Ä²£Èæ)¤¬ÊѤï¤ê¤Þ¤¹¡£¤½¤Î¤¿¤á¡¢¤³¤Î²£¥µ¥¤¥º¤Ë¤¢¤Ã¤¿ARToolkitÍѤΥ¥ã¥ê¥Ö¥ì¡¼¥·¥ç¥ó¥Õ¥¡¥¤¥ë¡Êres/raw/camera_para.dat¡Ë¤¬É¬Íפˤʤê¤Þ¤¹¡£
º£²ó¤Ï¡¢ÍÑ°Õ¤·¤Æ¤¤¤Ê¤¤¤Î¤Ç¡¢¤´¼«Ê¬¤ÇÍÑ°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£
¤³¤³¤¬¡¢¤¹¤Ù¤Æ¤ÎÆ°ºî¤ò°ì¤Ä¤Ë«¤Í¤ëÉôʬ¤Ç¤¹¡£¤³¤³¤òÆɤà¤È¡¢²¿¤ò¤·¤Æ¤¤¤ë¤Î¤«¡©¤¬¤À¤¤¤¿¤¤ÇÄ°®¤Ç¤¤Þ¤¹¡£
¼Â¤Ï¡¢¥«¥á¥é¤«¤é»£¤ì¤ë²èÁü¤Î¥µ¥¤¥º¤¬¡¢Â礤¹¤®¤Æ¡¢¡ÖOutOfMemoryError¡×¤¬È¯À¸¤·¡¢¥¢¥×¥ê¤¬Íî¤Á¤Æ¤·¤Þ¤¦¤³¤È¤¬¤¢¤ê¤Þ¤¹¡£¤·¤«¤â¡¢¡ÖOutOfMemoryError¡×¤Ï¡¢¤É¤¦¤ä¤éAndroid¤Ç¤Ï¥Ï¥ó¥É¥ê¥ó¥°¤¬ÉÔ²Äǽ¤Ê¤è¤¦¤Ç¡¢¥¢¥×¥ê¤¬¶¯À©½ªÎ»¤µ¤»¤é¤ì¤Æ¤·¤Þ¤¤¤Þ¤¹¡£
¤½¤³¤Ç¡¢¥µ¥¤¥ºÄ´À°¤Î¤¿¤á¤ËÆþ¤Ã¤Æ¤¤¤ë¥³¡¼¥É¤¬¡¢²¼µ¤ÎÉôʬ¤Ç¤¹¡£
¡¤Ç¡¢1/4¥µ¥¤¥º¤ËÄ´À°¤¹¤ë¤È¤¤¤¦¥ª¥×¥·¥ç¥ó¤ò»ØÄꤷ¤Æ¤¤¤Þ¤¹¡£
¤·¤«¤·¡¢¤³¤ì¤À¤È¡¢¾®¤µ¤¯¤Ê¤ê¤¹¤®¤Æ¤·¤Þ¤¦¾ì¹ç¤¬¤¢¤ë¤Î¤Ç¡¢¢¤Ç¡¢Height¤¬¡¢240¤è¤ê¾®¤µ¤¤¾ì¹ç¤Ï¡¢¸µ¤Î¥µ¥¤¥º¤Î²èÁü¤ò»È¤¦¤è¤¦¤Ë¤·¤Æ¤¤¤Þ¤¹¡£
BitmapFactory.Options options = new BitmapFactory.Options(); options.inSampleSize = 4;¡¦¡¦¡¦¡ Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length, options); if(bitmap.getHeight() < 240) {¡¦¡¦¡¦¢ bitmap = BitmapFactory.decodeByteArray(data, 0, data.length); }
º£²ó¤Ï¡¢¤³¤Î¤è¤¦¤ÊÊýË¡¤Çƨ¤²¤é¤ì¤Þ¤·¤¿¤¬¡¢¼ÂºÝ¤Ë¤Ï¡¢¥á¥â¥êÀ©¸Â¤Ï¤«¤Ê¤ê¸·¤·¤¤¤â¤Î¤Ë¤Ê¤ë²ÄǽÀ¤¬¤¢¤ê¤Þ¤¹¡£ºÇ°¡¢¥á¥â¥ê¥¢¥í¥±¡¼¥¿¤ò¼«ºî¤¹¤ë¤Ê¤É¡¢¥á¥â¥ê¤Î»ÈÍÑÎ̤ϡ¢¸·Ì©¤Ë´ÉÍý¤¹¤ëɬÍפ¬¤¢¤ë¤è¤¦¤Ç¤¹¡£(Activity#onLowMemory()¤ò¤É¤¦¤Ë¤«¤¹¤ëÊýË¡¤â¤¢¤ë¤«¤â¤·¤ì¤Þ¤»¤ó¤¬¡£¡£¡£)
´ðËÜŪ¤Ë¤³¤Î¥á¥½¥Ã¥É¤Ï¡¢¥«¥á¥é¥Ç¡¼¥¿¤Î²Ã¹©¤äARToolkit¤Î½èÍý¡¢3DÉÁ²è¤Î²¼½èÍý¤Ê¤É¡¢Èó¾ï¤Ë»þ´Ö¤Î¤«¤«¤ë½Å¤¤½èÍý¤È¤Ê¤ê¤Þ¤¹¡£
¤½¤³¤Ç¡¢¤³¤³¤Ç¤¤¤í¤¤¤í¤È¤º¤ë¤ò¤¹¤ë¤¿¤á¤Ë¤â¡¢
Î㤨¤Ð¡¢ARToolkit½èÍý1²ó¤Ë¤Ä¤¡¢ÇطʲèÁü¤Î½ñ¤´¹¤¨¤À¤±¤Ï3²ó¤ä¤ë ¤Ê¤É¤¹¤ë¤È¡¢¡Ø°ì¸«¥¹¥à¡¼¥ºÆ°¤¤¤Æ¤¤¤ë¡Ù¤è¤¦¤Ë¸«¤ë
ÉÁ²è¤Î½ñ¤´¹¤¨¤ÎºÙ¤«¤¤À©¸æ¤ò¤·¤¿¤¤¤È»×¤¤¡¢¤É¤¦¤·¤è¤¦¤«¤ÈÂÁߤ¤¤Æ¤ß¤Þ¤·¤¿¡£
·ëÏÀ¤«¤é¸À¤¦¤È¡¢¤Ò¤È¤Þ¤º¡¢¤¢¤¤é¤á¤Þ¤·¤¿¡£¤¹¤ß¤Þ¤»¤ó¡ª¡ª¡ª¼¡¤Î¥Ð¡¼¥¸¥ç¥ó¤Ç¹Í¤¨Ä¾¤·¤Þ¤¹¤Î¤Ç¡¢¾¯¡¹¤ªÂÔ¤Á¤¯¤À¤µ¤¤¡£<(_ _)>
¤Ç¡¢¤½¤Î¤È¤¤Î¼ºÇÔÃ̤ò¡¢²¼µ¤Ëµ¤·¤Þ¤¹¡£
¤Þ¤º¡¢²èÌÌÉÁ²è¤ÎÀ©¸æ¤Ç¤¹¤¬¡¢GLSurfaceView¤Ç¹Ô¤Ã¤Æ¤¤¤Þ¤¹¡£¤½¤·¤Æ¡¢GLSurfaceView¤Ë¤Ï¡¢
GLSurfaceView#onPause()
¤È¤¤¤¦¡¢²èÌÌÉÁ²è¤ò°ì»þÄä»ß¤µ¤»¤ë¥á¥½¥Ã¥É¤¬ÍÑ°Õ¤µ¤ì¤Æ¤¤¤Þ¤¹¤Î¤Ç¡¢¤³¤ì¤òÍøÍѤ·¤è¤¦¤È¤·¤Æ¡¢¥½¡¼¥¹¥³¡¼¥É¤ò¸«¤ë¤È¡¢¡¢¡¢
EglHelper#finish()
¤ò¸Æ¤Ó½Ð¤·¤Æ¤Þ¤·¤¿¡ªEglHelper¤¬½é´ü²½¤µ¤ì¤Æ¤·¤Þ¤¤¤Þ¤¹¡£
½èÍý¤ò·Ú¤¯¤·¤¿¤¤¤Î¤Ç¡¢¤³¤ì¤Ç¤Ï¡¢ËÜËöžÅݤʤΤǾ¤ÎÀ©¸æË¡¤òõ¤·¤¿¤È¤³¤í¡¢
GLSurfaceView#queueEvent(new Runnable())
¤¬¤¢¤ê¤Þ¤·¤¿¡£¤³¤ì¤Ç¤¹¤È¡¢Runnable#run()¤ÇÄêµÁ¤·¤¿½èÍý¤¬½ªÎ»¤¹¤ë¤Þ¤Ç¡¢²èÌÌÉÁ²è¤òÀ©¸æ¤Ç¤¤Þ¤¹¡£
¤È¤¤¤¦¤³¤È¤Ç¡¢¤³¤ì¤Ë¡ÖARToolkitDrawer#draw(byte[])¡×¤Î½èÍý¤ò¤½¤Î¤Þ¤ÞÆþ¤ì¤Æ¤ß¤¿¤È¤³¤í¡¢
dead lock¡ªorz
¤½¤·¤Æ¡¢Ä´ºº¤ò¿Ê¤á¤¿¤Î¤Ç¤¹¤¬¡¢»þ´ÖÀÚ¤ì¤È¤Ê¤ê¡¢ÂŶ¨Åª¤ËÆþ¤ì¤¿¤Î¤¬NyARToolkitAndroidActivity¥¯¥é¥¹¤Ë¤¢¤ë
private void draw() { drawFlag = true; try { // The measure against over load. Thread.sleep(500); } catch (InterruptedException e) { ; } drawFlag = false; mGLSurfaceView.queueEvent(new Runnable() { @Override public void run() { while (!drawFlag) try { Thread.sleep(400); } catch (InterruptedException e) { ; } } } ); }
¤Ç¤¹¡£¤À¤ì¤«¡¢¥«¥Ã¥³Îɤ¯ºî¤êľ¤·¤Æ¤¯¤ì¤ë¤È¥¦¥ì¥·¥¤¤Ç¤¹¡£<(_ _)>
Camera¡ßCallback¡ßBitmapÀá¤Ë¤Æ¡¢RGB¤Î»ý¤ÁÊý¤Ë´Ø¤¹¤ëµ½Ò¤¬¤¢¤ê¤Þ¤¹¤¬¡¢
¥Ó¥Ã¥È¥Þ¥Ã¥×¤ÈOpenGL/ES¤È¤ÎRGB¤Î»ý¤ÁÊý¤Î°ã¤¤
¤È¤¤¤¦Êý¤¬Àµ¤·¤¤¤È¤Î¡¢»ØŦ¤¬¤¢¤ê¤Þ¤·¤¿¤Î¤Ç¡¢ÄûÀµ¤µ¤»¤Æ¤¤¤¿¤À¤¤Þ¤¹¡£
Eclipse¤ÇAndroid¥×¥í¥¸¥§¥¯¥È¤òºîÀ®¤¹¤ë¤È¤¤Ë»ØÄꤷ¤¿¥Ñ¥Ã¥±¡¼¥¸²¼°Ê³°¤Ë¡¢¥½¡¼¥¹¥³¡¼¥É¤òÆþ¤ì¤Æ¤â¥³¥ó¥Ñ¥¤¥ë¤µ¤ì¤Þ¤»¤ó¡£
Android¥×¥í¥¸¥§¥¯¥È¤Ç¤Ï¡¢¤³¤Î¤è¤¦¤ÊÀ©¸Â¤¬Â¿¤¤¤Î¤Ç¡¢¥Ñ¥Ã¥±¡¼¥¸¤Î̾Á°¤òÊѤ¨¤ë¤È¤¤ÏÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£
J2SE´°Á´¸ß´¹¤Ç¤Ï¤Ê¤¤¤¿¤á¡¢°ìÉô¡¢Æþ¤Ã¤Æ¤¤¤Ê¤¤¥é¥¤¥Ö¥é¥ê¤Ê¤É¤¬¤¢¤ê¤Þ¤¹¡£¤È¤¯¤Ë¡¢javax°Ê²¼¤¬Èù̯¤ËÆþ¤Ã¤Æ¤¤¤Ê¤¤¤Î¤Ç¡¢¤±¤Ã¤³¤¦¡¢¤Ä¤é¤¤¤â¤Î¤¬¤¢¤ê¤Þ¤¹¡£
¤·¤«¤·¡¢Æþ¤Ã¤Æ¤¤¤Ê¤¤¤«¤é¤È¸À¤Ã¤Æ¡¢javax¤ÈƱ̾¤Î¥Ñ¥Ã¥±¡¼¥¸¡Ü¥¯¥é¥¹¤ò¼«ºî¤·¤Æ¤â¡¢Æ°¤¤Þ¤»¤ó¡£Android¤Î¥³¥ó¥Ñ¥¤¥ë»þ¤Î¥Á¥§¥Ã¥¯¤Ë¤è¤ê¡¢¤½¤Î¤è¤¦¤Ê¥¯¥é¥¹¤Ï¡¢ÃƤ«¤ì¤Æ¤·¤Þ¤¤¤Þ¤¹¡£
¤½¤Î¤¿¤á¡¢¥·¥¹¥Æ¥à¥¤¥á¡¼¥¸¤«¤éÊѤ¨¤Ê¤¤¤È¤¤¤±¤Ê¤¤¤¿¤á¡¢¥Ï¡¼¥É¥ë¤¬¹â¤¤¤Ç¤¹¡£
¡Ö¥³¥é¥à¡§Android¤Ç¤Î¥Ç¥Ð¥¤¥¹¤Î°·¤¤¡×¤Ç¡¢½ñ¤¤¤¿¤è¤¦¤ËAndroid¤Ë¤Ï¡¢xxxListener¡ÜxxxCallback¤¬¤¢¤ê¤Þ¤¹¡£
¤½¤·¤Æ¡¢¼Â¤Ï¤µ¤é¤Ë¡¢¤³¤ì¤éxxxListener¡ÜxxxCallback¤ò«¤Í¤ë¡¢xxxManager¤äxxxRegistrar¡¢xxxProvider¤Ê¤É¤¬¤¢¤ê¤Þ¤¹¡£
xxxListener¡ÜxxxCallback¤Ï¡¢¤³¤ì¤é¤ËÅÐÏ¿¤µ¤ì¤Æ¡¢°ì¸µÅª¤Ë°·¤¨¤ë¤è¤¦¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£¤³¤ì¤Ë¤è¤ê¡¢Î㤨¤Ð¡¢ÅÅÏäâ3G¤Ë¤è¤ëÃå¿®¤«¡©IPÅÅÏäˤè¤ëÃå¿®¤«¡©¤Ê¤Éµ¤¤Ë¤¹¤ë¤³¤È¤Ê¤¯¡¢°ì¸µÅª¤Ë°·¤¨¤ë¤è¤¦¤Ë½ÐÍè¤Þ¤¹¡£
Dev1Camera¥¯¥é¥¹
¤È¤«¡¢¥í¡¼¥«¥ë¤ÊÊÑ¿ô¤ä¤é½èÍý¤·¤Þ¤¯¤ê¤Î¥á¥½¥Ã¥É¤ä¤é¡¢¤â¤Ã¤ÈÀÚ¤êʬ¤±¤¿Êý¤¬¤¤ì¤¤¤Ê¤Î¤Ë¡ª¤È¤«¡¢»×¤¤¤Þ¤»¤ó¤«¡©»ä¤â»×¤¤¤Þ¤¹¡£(;^_^A ¥¢¥»¥¢¥»¡¦¡¦¡¦
¤·¤«¤·¡¢¼Â¤Ï¡¢°ÕÌ£¤¬¤¢¤Ã¤¿¤ê¤·¤Þ¤¹¡£
¤½¤ì¤Ï¡¢Dev Phone 1 ¤ä G1 ¤Ê¤É¤ÎÈóÎϤÊCPU¤Ç¤¹¤È¡¢
¥á¥½¥Ã¥É¸Æ¤Ó½Ð¤·¥³¥¹¥È¤Ç¤µ¤¨¥Ð¥«¤Ë½ÐÍè¤Ê¤¤¥³¥¹¥È
¤Ë¤Ê¤ê¤Þ¤¹¡£
¤È¤¯¤Ë¡¢¤³¤ÎDev1Camera¥¯¥é¥¹¤Î¤è¤¦¤Ê¥Ï¡¼¥É¥¦¥§¥¢¤ÈÏ¢·È¤¹¤ë¤è¤¦¤Ê¥¯¥é¥¹¤Ç¤¹¤È¡¢Ã×̿Ū¤È¸À¤¦¤¯¤é¤¤¤Î¤â¤Î¤Ë¤Ê¤ê¤Þ¤¹¡£
¤½¤Î¤¿¤á¡¢Android¤Î¥½¡¼¥¹¥³¡¼¥É¥ê¥Ý¥¸¥È¥ê¤Ë¤¢¤ë¥½¡¼¥¹¥³¡¼¥É¤â¡¢Â®ÅÙ¤¬É¬Íפʤâ¤Î¤Ï¡¢¤³¤Î¤è¤¦¤Ê¹½Â¤¤È¤Ê¤Ã¤Æ¤ª¤ê¡¢¤¶¤é¤Ë3000¹Ô¤òĶ¤¨¤ë¥¯¥é¥¹¤Ê¤É¤â¤¢¤ê¤Þ¤¹¡£OHA¤µ¤ó¤â¡¢Â®ÅÙ¥Á¥å¡¼¥Ë¥ó¥°¤Ë¶ìÏ«¤·¤Æ¤¤¤ë¤È¤¤¤¦¤³¤È¤Ç¤¹¡£
StaticCamera | ¥í¡¼¥«¥ë¤ËÊݸ¤µ¤ì¤¿²èÁü¤ò¥«¥á¥é²èÁü¤È¤·¤ÆÆɤ߹þ¤à |
SocketCamera | Jpeg²èÁü¤ò¡¢Socket·Ðͳ¤Ç¼èÆÀ¤¹¤ë |
Dev1Camera | G1¤äDev Phone 1¸þ¤±¼ÂÁõ |
AttachedCamera | ËÜÍèŪ¤ÊCamera²èÁü¤Î¼èÆÀ¤ÎÊýË¡¡£G1¤äDev Phone 1¤Ç¤Ï¡¢¤¦¤´¤«¤Ê¤¤orz¢ÍÍýͳ¤Ï¡¢»£¤ì¤ë²èÁü¥Õ¥©¡¼¥Þ¥Ã¥È¤¬¡¢Bitmap¥¯¥é¥¹¤Ç°·¤¨¤Ê¤¤¤¿¤á¤Ç¤¹¡£¥Ð¥°°·¤¤¤Ç¡¢¤¹¤Ç¤Ë¥ì¥Ó¥å¡¼¥¹¥Æ¡¼¥È¤ËÆþ¤Ã¤Æ¤¤¤ë¤Î¤Ç¡¢¶á¤¤¤¦¤Á¤Ë»È¤¨¤ë¤è¤¦¤Ë¤Ê¤ë¤Ï¤º¤Ç¤¹¡£ |
¤Á¤Ê¤ß¤Ë¡¢Armadillo-500¾å¤ÎAndroid¤Ç¥«¥á¥é¥×¥ì¥Ó¥å¡¼¤¹¤ëÊýË¡¤Ç»È¤Ã¤Æ¤¤¤ë¤â¤Î¤ÈƱ¤¸¥Õ¥©¡¼¥Þ¥Ã¥È¤Ê¤Î¤Ç¡¢Armadillo-500¾å¤ÇËÜ¥¢¥×¥ê¤ÏÆ°ºî¤µ¤»¤ë¤³¤È¤â½ÐÍè¤Þ¤¹¡£
SocketCamera¥¯¥é¥¹¤Ç¡¢¥«¥á¥é²èÁü¤Î¥¹¥È¥ê¡¼¥à¤òÆɤ߹þ¤à¤È¤³¤í¤Ë¤¢¤ë¡¢
if(offset+1600 > buf_size){
¤Î¡Ö1600¡×¤Ç¤¹¤¬¡¢Ether¤Î1¥Ñ¥±¥Ã¥È¥µ¥¤¥º¤Ç¤¹¡£
Android¤Î¤¿¤á¤Î3D¤äOpenGL/ES¤òÁàºî¤¹¤ë¤¿¤á¤Ë¡¢
GLBg GLSurfaceView ModelRenderer
¤È¤¤¤¦¥¯¥é¥¹¤òÍÑ°Õ¤·¤Æ»È¤Ã¤Æ¤¤¤Þ¤¹¡£
¤³¤ì¤é¤Ï¡¢¤Ï¤Ã¤¤ê¸À¤Ã¤Æ¡¢Android¤ÎOpenGL/ES¤È¤ÎÀ襤¤ÎµÏ¿¤Ç¤·¤«¤¢¤ê¤Þ¤»¤ó¡£Íפ¹¤ë¤Ë¡¢3D¥Á¥Ã¥×¤ÎÀ©¸Â¤À¤Ã¤¿¤ê¡¢¤Þ¤À¡¢Ì¤¼ÂÁõ¤È¤·¤«»×¤¨¤Ê¤«¤Ã¤¿¤ê¡¢¤¿¤À¤Î¥Ð¥°¤È¤·¤«»×¤¨¤Ê¤«¤Ã¤¿¤ê¡¢¤Ê¤É¤ò¤É¤¦²óÈò¤¹¤ë¤«¤È¤¤¤¦¥Ð¥Ã¥É¥Î¥¦¥Ï¥¦¤Î¸Ç¤Þ¤ê¤Ç¤¹¡£orz
¤Ê¤Î¤Ç¡¢´ðËÜŪ¤Ë¤Ï¡¢¡Ø¤Ê¤Ë¤â¹Í¤¨¤º¤Ë¤½¤Î¤Þ¤Þ»È¤¨¡Ù¤È¤¤¤¦¤³¤È¤Ç¡¢²òÀâ¤Ï¾Êά¤µ¤»¤Æ¤¤¤¿¤À¤¤Þ¤¹¡£
¤³¤Î¤Ø¤ó¤Î¾ÜºÙ¤ÎÏäϡ¢3D¤äOpenGL/ES¤Ë´Ø¤·¤Æ¤Ï¡¢¥¨¥¤¥Á¥¢¥¤¤Î¹â¶¶¤µ¤ó¤Ê¤É¤ò¤ª¸Æ¤Ó¤·¤Æ¡¢¥»¥ß¥Ê¡¼¤ò³«ºÅ¤µ¤»¤Æ¤¤¤¿¤À¤³¤¦¤È»×¤¤¤Þ¤¹¤Î¤Ç¡¢¤´Î»¾µ¤¯¤À¤µ¤¤¡£
¤¹¤ß¤Þ¤»¤ó¡£ËÜÅö¤Ï¡¢³Æ¼ï3D¥Õ¥©¡¼¥Þ¥Ã¥È¤ò¤³¤ì¤Ç¥é¥Ã¥×¤¹¤ë¤Ï¤º¤À¤Ã¤¿¤Î¤Ç¤¹¤¬¡¢´Ö¤Ë¹ç¤¤¤Þ¤»¤ó¤Ç¤·¤¿¡£
¼¡¤Î¥Ð¡¼¥¸¥ç¥ó¤Ç¤Ï¡¢¼ÂÁõ¤·¤¿¤¤¤È»×¤¤¤Þ¤¹¡£
¸½ºß¡¢NyARToolkit¤ÎVer.2.0²½ ¤È Android¤ËÉÕ°¤·¤Æ¤¤¤ëfloat·Ï¤Î¥Í¥¤¥Æ¥£¥Ö¥é¥¤¥Ö¥é¥ê¤ò»ÈÍѤ¹¤ë¤è¤¦¤ËÊѹ¹¤ò¹Ô¤Ã¤Æ¤¤¤Þ¤¹¡£
¤½¤ì¤Ë¤¢¤ï¤»¤Æ¸ø³«¤¹¤ëͽÄê¤Ç¤¹¤Î¤Ç¡¢¾¯¡¹¤ªÂÔ¤Á¤¯¤À¤µ¤¤¡£