--- /dev/null
+Index: D:/project.files/java.Lab/NyARToolKit/sample/java3d/src/jp/nyatla/nyartoolkit/java3d/utils/NyARSingleMarkerBehaviorListener.java\r
+===================================================================\r
+--- D:/project.files/java.Lab/NyARToolKit/sample/java3d/src/jp/nyatla/nyartoolkit/java3d/utils/NyARSingleMarkerBehaviorListener.java (revision 0)\r
++++ D:/project.files/java.Lab/NyARToolKit/sample/java3d/src/jp/nyatla/nyartoolkit/java3d/utils/NyARSingleMarkerBehaviorListener.java (revision 178)\r
+@@ -0,0 +1,24 @@\r
++/**\r
++ * NyARToolkit\82ÌBehavior\82Ì\83\8a\83X\83i\r
++ * (c)2008 A\8cÕ\81\97nyatla.jp\r
++ * airmail@ebony.plala.or.jp\r
++ * http://nyatla.jp/\r
++ */\r
++package jp.nyatla.nyartoolkit.java3d.utils;\r
++\r
++import javax.media.j3d.*;\r
++\r
++public interface NyARSingleMarkerBehaviorListener\r
++{\r
++ /**\r
++ * \82±\82Ì\83\8a\83X\83i\82Í\81A\83\8a\83X\83i\82É\83}\81[\83J\81[\82É\98A\93®\82µ\82Ä\83I\83u\83W\83F\83N\83g\82ð\91\80\8dì\82·\82é\83`\83\83\83\93\83X\82ð\97^\82¦\82Ü\82·\81B\r
++ * \83\8a\83X\83i\82ÍNyARSingleMarkerBehavior\8aÖ\90\94\93à\82ÌprocessStimulus\8aÖ\90\94\82©\82ç\8cÄ\82Ñ\8fo\82³\82ê\82Ü\82·\81B\r
++ * \r
++ * @param i_is_marker_exist\r
++ * \83}\81[\83J\81[\82ª\91¶\8dÝ\82·\82é\8fê\8d\87true\81A\91¶\8dÝ\82µ\82È\82¢\8fê\8d\87\81Afalse\82Å\82·\81B\r
++ * @param i_transform3d\r
++ * \83}\81[\83J\81[\82ª\91¶\8dÝ\82·\82é\8fê\8d\87\81A\82»\82Ì\95Ï\8a·\8ds\97ñ\82ª\8ew\92è\82³\82ê\82Ü\82·\81B\r
++ * i_is_marker_exist\82ªtrue\82Ì\8e\9e\82¾\82¯\97L\8cø\82Å\82·\81B\r
++ */\r
++ public void onUpdate(boolean i_is_marker_exist,Transform3D i_transform3d);\r
++}\r
+Index: D:/project.files/java.Lab/NyARToolKit/sample/java3d/src/jp/nyatla/nyartoolkit/java3d/utils/J3dNyARRaster_RGB.java\r
+===================================================================\r
+--- D:/project.files/java.Lab/NyARToolKit/sample/java3d/src/jp/nyatla/nyartoolkit/java3d/utils/J3dNyARRaster_RGB.java (revision 0)\r
++++ D:/project.files/java.Lab/NyARToolKit/sample/java3d/src/jp/nyatla/nyartoolkit/java3d/utils/J3dNyARRaster_RGB.java (revision 178)\r
+@@ -0,0 +1,64 @@\r
++/**\r
++ * NyARRaster_RGB\82ÉOpenGL\8cü\82¯\8aÖ\90\94\82ð\92Ç\89Á\82µ\82½\82à\82Ì\r
++ * (c)2008 A\8cÕ\81\97nyatla.jp\r
++ * airmail(at)ebony.plala.or.jp\r
++ * http://nyatla.jp/\r
++ */\r
++package jp.nyatla.nyartoolkit.java3d.utils;\r
++\r
++import java.awt.image.*;\r
++import java.awt.color.*;\r
++\r
++import javax.media.j3d.ImageComponent;\r
++import javax.media.j3d.ImageComponent2D;\r
++\r
++\r
++\r
++import jp.nyatla.nyartoolkit.NyARException;\r
++import jp.nyatla.nyartoolkit.core.NyARParam;\r
++import jp.nyatla.nyartoolkit.jmf.utils.*;\r
++\r
++\r
++public class J3dNyARRaster_RGB extends JmfNyARRaster_RGB\r
++{\r
++// public ImageUpdater updater; \r
++ private ImageComponent2D imc2d;\r
++ private byte[] i2d_buf;\r
++\r
++ public void setBuffer(javax.media.Buffer i_buffer) throws NyARException\r
++ {\r
++ super.setBuffer(i_buffer);\r
++ //\83\81\83\82\81F\82±\82Ì\8e\9e\93_\82Å\82Í\81Aref_data\82É\82Íi_buffer\82Ì\8eQ\8fÆ\92l\82ª\93ü\82Á\82Ä\82é\81B\r
++ synchronized(imc2d){\r
++ //\83L\83\83\83v\83`\83\83\83f\81[\83^\82ði2d\82Ì\83o\83b\83t\83@\82É\83R\83s\81[\82·\82é\81B\81i\82±\82ê\8fÈ\97ª\82µ\82½\82¢\82È\82 \81c\81B\81j\r
++ System.arraycopy(ref_buf,0,i2d_buf,0,this.i2d_buf.length);\r
++ }\r
++ //\82±\82±\82Åref_buf\82Ì\8eQ\8fÆ\92l\82ðref_buf\82Ö\88Ú\93®\r
++ ref_buf=i2d_buf;\r
++ } \r
++ public J3dNyARRaster_RGB(NyARParam i_cparam)\r
++ {\r
++ super(i_cparam.getX(),i_cparam.getY());\r
++\r
++ //RGB\82Ì\83\89\83X\83^\82ð\8dì\82é\81B\r
++// ColorSpace cs=ColorSpace.getInstance(ColorSpace.CS_LINEAR_RGB);\r
++// ComponentColorModel cm;\r
++// cm=new ComponentColorModel(cs,new int[]{8,8,8},false,false,ComponentColorModel.OPAQUE,DataBuffer.TYPE_BYTE);\r
++// java.awt.image.WritableRaster raster=cm.createCompatibleWritableRaster(width,height);\r
++// i2d_buf=((DataBufferByte)raster.getDataBuffer()).getData();\r
++// BufferedImage background_image = new BufferedImage(cm,raster, false, null);\r
++ BufferedImage background_image = new BufferedImage(width,height,BufferedImage.TYPE_3BYTE_BGR);\r
++ i2d_buf=((DataBufferByte)background_image.getRaster().getDataBuffer()).getData();\r
++ //\r
++ imc2d= new ImageComponent2D(ImageComponent2D.FORMAT_RGB, background_image, true, true);\r
++ imc2d.setCapability(ImageComponent.ALLOW_IMAGE_WRITE);\r
++ }\r
++ /**\r
++ * \82±\82Ì\83I\83u\83W\83F\83N\83g\82Æ\98A\93®\82·\82éImageComponent2D\83I\83u\83W\83F\83N\83g\82Ì\8eQ\8fÆ\92l\82ð\93¾\82é\81B\r
++ * @return\r
++ */\r
++ public ImageComponent2D getImageComponent2D()\r
++ {\r
++ return imc2d;\r
++ }\r
++}\r
+Index: D:/project.files/java.Lab/NyARToolKit/sample/java3d/src/jp/nyatla/nyartoolkit/java3d/utils/J3dNyARParam.java\r
+===================================================================\r
+--- D:/project.files/java.Lab/NyARToolKit/sample/java3d/src/jp/nyatla/nyartoolkit/java3d/utils/J3dNyARParam.java (revision 0)\r
++++ D:/project.files/java.Lab/NyARToolKit/sample/java3d/src/jp/nyatla/nyartoolkit/java3d/utils/J3dNyARParam.java (revision 178)\r
+@@ -0,0 +1,119 @@\r
++/**\r
++ * NyARParam\82ÉOpenGL\8cü\82¯\8aÖ\90\94\82ð\92Ç\89Á\82µ\82½\82à\82Ì\r
++ * (c)2008 A\8cÕ\81\97nyatla.jp\r
++ * airmail(at)ebony.plala.or.jp\r
++ * http://nyatla.jp/\r
++ */\r
++package jp.nyatla.nyartoolkit.java3d.utils;\r
++\r
++import jp.nyatla.nyartoolkit.core.*;\r
++import javax.media.j3d.Transform3D;\r
++\r
++public class J3dNyARParam extends NyARParam\r
++{\r
++ private double view_distance_min=0.01;//1cm\81`10.0m\r
++ private double view_distance_max=10.0;\r
++ private Transform3D m_projection=null;\r
++ /**\r
++ * \8e\8b\91Ì\90Ï\82Ì\8bß\82¢\95û\82ð\83\81\81[\83g\83\8b\82Å\8ew\92è\r
++ * @param i_new_value\r
++ */\r
++ public void setViewDistanceMin(double i_new_value)\r
++ {\r
++ m_projection=null;//\83L\83\83\83b\83V\83\85\8dÏ\95Ï\90\94\8f\89\8aú\89»\r
++ view_distance_min=i_new_value;\r
++ }\r
++ /**\r
++ * \8e\8b\91Ì\90Ï\82Ì\89\93\82¢\95û\82ð\83\81\81[\83g\83\8b\82Å\8ew\92è\r
++ * @param i_new_value\r
++ */\r
++ public void setViewDistanceMax(double i_new_value)\r
++ {\r
++ m_projection=null;//\83L\83\83\83b\83V\83\85\8dÏ\95Ï\90\94\8f\89\8aú\89»\r
++ view_distance_max=i_new_value;\r
++ }\r
++ /**\r
++ * void arglCameraFrustumRH(const ARParam *cparam, const double focalmin, const double focalmax, GLdouble m_projection[16])\r
++ * \8aÖ\90\94\82Ì\92u\82«\8a·\82¦\r
++ * @param focalmin\r
++ * @param focalmax\r
++ * @return\r
++ */\r
++ public Transform3D getCameraTransform()\r
++ {\r
++ //\8aù\82É\92l\82ª\83L\83\83\83b\83V\83\85\82³\82ê\82Ä\82¢\82½\82ç\82»\82ê\82ð\8eg\82¤\r
++ if(m_projection!=null){\r
++ return m_projection;\r
++ }\r
++ //\96³\82¯\82ê\82Î\8cv\8eZ\r
++\r
++ NyARMat trans_mat=new NyARMat(3,4);\r
++ NyARMat icpara_mat=new NyARMat(3,4);\r
++ double[][] p=new double[3][3], q=new double[4][4];\r
++ double width, height;\r
++ int i, j;\r
++ \r
++ width = xsize;\r
++ height = ysize;\r
++ \r
++ decompMat(icpara_mat,trans_mat);\r
++\r
++ double[][] icpara=icpara_mat.getArray();\r
++ double[][] trans=trans_mat.getArray();\r
++ for (i = 0; i < 4; i++) {\r
++ icpara[1][i] = (height - 1)*(icpara[2][i]) - icpara[1][i];\r
++ }\r
++ \r
++ for(i = 0; i < 3; i++) {\r
++ for(j = 0; j < 3; j++) {\r
++ p[i][j] = icpara[i][j] / icpara[2][2];\r
++ }\r
++ }\r
++ //p[0][0],p[1][1]=n\r
++ //p[0][2],p[1][2]=t+b\r
++\r
++ //Projection\82Ì\8cv\8eZ\r
++ q[0][0] = (2.0 * p[0][0] / (width - 1));\r
++ q[0][1] = (2.0 * p[0][1] / (width - 1));\r
++ q[0][2] = -((2.0 * p[0][2] / (width - 1)) - 1.0);\r
++ q[0][3] = 0.0;\r
++ \r
++ q[1][0] = 0.0;\r
++ q[1][1] = -(2.0 * p[1][1] / (height - 1));\r
++ q[1][2] = -((2.0 * p[1][2] / (height - 1)) - 1.0);\r
++ q[1][3] = 0.0;\r
++ \r
++ q[2][0] = 0.0;\r
++ q[2][1] = 0.0;\r
++ q[2][2] = (view_distance_max + view_distance_min)/(view_distance_min - view_distance_max);\r
++ q[2][3] = 2.0 * view_distance_max * view_distance_min / (view_distance_min - view_distance_max);\r
++ \r
++ q[3][0] = 0.0;\r
++ q[3][1] = 0.0;\r
++ q[3][2] = -1.0;\r
++ q[3][3] = 0.0;\r
++ \r
++ q[2][2]=q[2][2]*-1;\r
++ q[2][3]=q[2][3]*-1;\r
++ \r
++ double[] tmp_projection=new double[16];\r
++ for (i = 0; i < 4; i++) { // Row.\r
++ // First 3 columns of the current row.\r
++ for (j = 0; j < 3; j++) { // Column.\r
++ tmp_projection[i + j*4] =(\r
++ q[i][0] * trans[0][j] +\r
++ q[i][1] * trans[1][j] +\r
++ q[i][2] * trans[2][j]);\r
++ }\r
++ // Fourth column of the current row.\r
++ tmp_projection[i + 3*4]=\r
++ q[i][0] * trans[0][3] +\r
++ q[i][1] * trans[1][3] +\r
++ q[i][2] * trans[2][3] +\r
++ q[i][3];\r
++ }\r
++ m_projection=new Transform3D(tmp_projection);\r
++ m_projection.transpose();\r
++ return m_projection;\r
++ }\r
++}\r
+Index: D:/project.files/java.Lab/NyARToolKit/sample/java3d/src/jp/nyatla/nyartoolkit/java3d/utils/NyARSingleMarkerBehaviorHolder.java\r
+===================================================================\r
+--- D:/project.files/java.Lab/NyARToolKit/sample/java3d/src/jp/nyatla/nyartoolkit/java3d/utils/NyARSingleMarkerBehaviorHolder.java (revision 0)\r
++++ D:/project.files/java.Lab/NyARToolKit/sample/java3d/src/jp/nyatla/nyartoolkit/java3d/utils/NyARSingleMarkerBehaviorHolder.java (revision 178)\r
+@@ -0,0 +1,191 @@\r
++/**\r
++ * NyARToolkit\82ÌBehavior\83z\83\8b\83_\81[\r
++ * (c)2008 A\8cÕ\81\97nyatla.jp\r
++ * airmail@ebony.plala.or.jp\r
++ * http://nyatla.jp/\r
++ */\r
++package jp.nyatla.nyartoolkit.java3d.utils;\r
++\r
++import java.util.Enumeration;\r
++\r
++import javax.media.Buffer;\r
++import javax.media.j3d.*;\r
++import javax.vecmath.*;\r
++\r
++import jp.nyatla.nyartoolkit.core.NyARParam;\r
++import jp.nyatla.nyartoolkit.detector.NyARSingleDetectMarker;\r
++import jp.nyatla.nyartoolkit.jmf.*;\r
++import jp.nyatla.nyartoolkit.jmf.utils.JmfCameraCapture;\r
++import jp.nyatla.nyartoolkit.jmf.utils.JmfCaptureListener;\r
++import jp.nyatla.nyartoolkit.*;\r
++import jp.nyatla.nyartoolkit.core.*;\r
++\r
++/**\r
++ * NyARToolkit\82Æ\98A\93®\82µ\82½Behavior\82ð\95Ô\8bp\82·\82é\83N\83\89\83X\82Å\82·\81B\r
++ * \92ñ\8b\9f\82Å\82«\82éBehavior\82Í\81ABackground\82ÆTransformgroup\82Å\82·\81B\r
++ *\r
++ */\r
++public class NyARSingleMarkerBehaviorHolder implements JmfCaptureListener\r
++{\r
++ private NyARParam cparam;\r
++ private JmfCameraCapture capture;\r
++ private J3dNyARRaster_RGB nya_raster;//\8dÅ\91å3\83X\83\8c\83b\83h\82Å\8b¤\97L\82³\82ê\82é\82Ì\82Å\81A\94r\91¼\90§\8cä\82©\82¯\82é\82±\82Æ\81B\r
++ private NyARSingleDetectMarker nya;\r
++ //Behavior\83z\83\8b\83_\r
++ private NyARBehavior nya_behavior;\r
++ public NyARSingleMarkerBehaviorHolder(NyARParam i_cparam,float i_rate,NyARCode i_ar_code,double i_marker_width) throws NyARException\r
++ {\r
++ nya_behavior=null;\r
++ cparam=i_cparam;\r
++ capture=new JmfCameraCapture(cparam.getX(),cparam.getY(),i_rate,JmfCameraCapture.PIXEL_FORMAT_RGB);\r
++ capture.setCaptureListener(this);\r
++ nya_raster=new J3dNyARRaster_RGB(cparam); \r
++ nya=new NyARSingleDetectMarker(cparam,i_ar_code,i_marker_width);\r
++ nya_behavior=new NyARBehavior(nya,nya_raster,i_rate);\r
++ }\r
++ public Behavior getBehavior()\r
++ {\r
++ return nya_behavior;\r
++ }\r
++ /**\r
++ * i_back_ground\82É\83L\83\83\83v\83`\83\83\89æ\91\9c\82ð\93]\91\97\82·\82é\82æ\82¤\82ÉBehavior\82ð\90Ý\92è\82µ\82Ü\82·\81B\r
++ * i_back_groung\82ÍALLOW_IMAGE_WRITE\91®\90«\82ð\8e\9d\82Â\82à\82Ì\82Å\82 \82é\95K\97v\82ª\82 \82è\82Ü\82·\81B\r
++ * @param i_back_groung\r
++ * @return\r
++ */\r
++ public void setBackGround(Background i_back_ground)\r
++ {\r
++ //\83R\81[\83\8b\90æ\82Å\94r\91¼\90§\8cä\r
++ nya_behavior.setRelatedBackGround(i_back_ground);\r
++ }\r
++ /**\r
++ * i_trgroup\82Ì\8dÀ\95W\8cn\82ð\83}\81[\83J\81[\82É\82 \82í\82¹\82é\82æ\82¤\82ÉBehavior\82ð\90Ý\92è\82µ\82Ü\82·\81B\r
++ *\r
++ */\r
++ public void setTransformGroup(TransformGroup i_trgroup)\r
++ {\r
++ //\83R\81[\83\8b\90æ\82Å\94r\91¼\90§\8cä\r
++ nya_behavior.setRelatedTransformGroup(i_trgroup);\r
++ }\r
++ /**\r
++ * \8dÀ\95W\8cn\8dÄ\8cv\8eZ\8cã\82É\8cÄ\82Ñ\8fo\82³\82ê\82é\83\8a\83X\83i\82Å\82·\81B\r
++ * @param i_listener\r
++ */\r
++ public void setUpdateListener(NyARSingleMarkerBehaviorListener i_listener)\r
++ {\r
++ //\83R\81[\83\8b\90æ\82Å\94r\91¼\90§\8cä\r
++ nya_behavior.setUpdateListener(i_listener);\r
++ }\r
++ /**\r
++ * \83\89\83X\83^\82ð\8dX\90V \83R\81[\83\8b\83o\83b\83N\8aÖ\90\94\82¾\82©\82ç\8cÄ\82ñ\82¶\82á\82ç\82ß\82¦\r
++ */\r
++ public void onUpdateBuffer(Buffer i_buffer)\r
++ {\r
++ try{\r
++ synchronized(nya_raster){\r
++ nya_raster.setBuffer(i_buffer);\r
++ }\r
++ }catch(Exception e){\r
++ e.printStackTrace();\r
++ }\r
++ }\r
++ public void start() throws NyARException\r
++ {\r
++ //\8aJ\8en\r
++ capture.start();\r
++ }\r
++ public void stop()\r
++ {\r
++ capture.stop();\r
++ }\r
++}\r
++\r
++\r
++class NyARBehavior extends Behavior\r
++{\r
++ private NyARSingleDetectMarker related_nya;\r
++ private TransformGroup trgroup;\r
++ private Background back_ground;\r
++ private J3dNyARRaster_RGB raster;\r
++ private WakeupCondition wakeup;\r
++ private NyARSingleMarkerBehaviorListener listener;\r
++ public void initialize()\r
++ {\r
++ wakeupOn(wakeup);\r
++ }\r
++ /**\r
++ * i_related_ic2d\82Ì\93à\97e\82Å\92è\8aú\93I\82Éi_back_ground\82ð\8dX\90V\82·\82éBehavior\r
++ * @param i_back_ground\r
++ * @param i_related_ic2d\r
++ */\r
++ public NyARBehavior(NyARSingleDetectMarker i_related_nya,J3dNyARRaster_RGB i_related_raster,float i_rate)\r
++ {\r
++ super();\r
++ wakeup=new WakeupOnElapsedTime((int)(1000/i_rate));\r
++ related_nya=i_related_nya;\r
++ trgroup =null;\r
++ raster =i_related_raster;\r
++ back_ground=null;\r
++ listener=null;\r
++ this.setSchedulingBounds(new BoundingSphere(new Point3d(), 100.0));\r
++ }\r
++ public void setRelatedBackGround(Background i_back_ground)\r
++ {\r
++ synchronized(raster){\r
++ back_ground=i_back_ground;\r
++ }\r
++ }\r
++ public void setRelatedTransformGroup(TransformGroup i_trgroup)\r
++ {\r
++ synchronized(raster){\r
++ trgroup=i_trgroup;\r
++ } \r
++ }\r
++ public void setUpdateListener(NyARSingleMarkerBehaviorListener i_listener)\r
++ {\r
++ synchronized(raster){\r
++ listener=i_listener;\r
++ }\r
++ }\r
++\r
++ /**\r
++ * \82¢\82í\82ä\82é\83C\83x\83\93\83g\83n\83\93\83h\83\89\r
++ */\r
++ public void processStimulus(Enumeration criteria)\r
++ {\r
++ try{\r
++ synchronized(raster){\r
++ Transform3D t3d=null;\r
++ boolean is_marker_exist=false;\r
++ if(back_ground!=null){\r
++ back_ground.setImage(raster.getImageComponent2D()); \r
++ }\r
++ if(raster.hasData()){\r
++ is_marker_exist=related_nya.detectMarkerLite(raster, 100);\r
++ if(is_marker_exist){\r
++ NyARMat nymat=related_nya.getTransmationMatrix();\r
++ double[][] src=nymat.getArray();\r
++ Matrix4d matrix=new Matrix4d(\r
++ src[0][0],-src[1][0],-src[2][0],0,\r
++ -src[0][1], src[1][1], src[2][1],0,\r
++ -src[0][2], src[1][2], src[2][2],0,\r
++ -src[0][3], src[1][3], src[2][3],1);\r
++ matrix.transpose();\r
++ t3d=new Transform3D(matrix);\r
++ if(trgroup!=null){\r
++ trgroup.setTransform(t3d);\r
++ }\r
++ }\r
++ }\r
++ if(listener!=null)\r
++ {\r
++ listener.onUpdate(is_marker_exist, t3d);\r
++ }\r
++ }\r
++ wakeupOn(wakeup); \r
++ }catch(Exception e){\r
++ e.printStackTrace();\r
++ }\r
++ }\r
++}\r
++\r
+Index: D:/project.files/java.Lab/NyARToolKit/sample/java3d/src/jp/nyatla/nyartoolkit/java3d/sample/NyARJava3D.java\r
+===================================================================\r
+--- D:/project.files/java.Lab/NyARToolKit/sample/java3d/src/jp/nyatla/nyartoolkit/java3d/sample/NyARJava3D.java (revision 0)\r
++++ D:/project.files/java.Lab/NyARToolKit/sample/java3d/src/jp/nyatla/nyartoolkit/java3d/sample/NyARJava3D.java (revision 178)\r
+@@ -0,0 +1,148 @@\r
++/**\r
++ * Java3D\83T\83\93\83v\83\8b\83v\83\8d\83O\83\89\83\80\r
++ * \83V\83\93\83O\83\8b\83}\81[\83J\81[\92Ç\90Õ\97p\82ÌBehavior\82ð\8eg\82Á\82Ä\81A\94w\8ci\82Æ\82P\8cÂ\82Ì\83}\81[\83J\81[\82É\98A\93®\82µ\82½TransformGroup\r
++ * \82ð\93®\82©\82µ\82Ü\82·\81B\r
++ * (c)2008 A\8cÕ\81\97nyatla.jp\r
++ * airmail@ebony.plala.or.jp\r
++ * http://nyatla.jp/\r
++ */\r
++package jp.nyatla.nyartoolkit.java3d.sample;\r
++\r
++import java.awt.BorderLayout;\r
++import javax.media.j3d.*;\r
++\r
++import com.sun.j3d.utils.universe.*;\r
++import java.awt.*;\r
++import javax.swing.JFrame;\r
++import javax.vecmath.*;\r
++\r
++import jp.nyatla.nyartoolkit.core.*;\r
++import jp.nyatla.nyartoolkit.java3d.utils.*;\r
++\r
++import com.sun.j3d.utils.geometry.ColorCube;\r
++\r
++public class NyARJava3D extends JFrame implements NyARSingleMarkerBehaviorListener \r
++{\r
++ private final String CARCODE_FILE ="../../Data/patt.hiro";\r
++ private final String PARAM_FILE ="../../Data/camera_para.dat";\r
++ //NyARToolkit\8aÖ\8cW\r
++ private NyARSingleMarkerBehaviorHolder nya_behavior;\r
++ private J3dNyARParam ar_param;\r
++ //universe\8aÖ\8cW\r
++ private Canvas3D canvas;\r
++ private Locale locale;\r
++ private VirtualUniverse universe;\r
++ public static void main(String[] args)\r
++ {\r
++ try{\r
++ NyARJava3D frame = new NyARJava3D();\r
++ \r
++ frame.setVisible(true);\r
++ Insets ins=frame.getInsets();\r
++ frame.setSize(320+ins.left+ins.right,240+ins.top+ins.bottom);\r
++ frame.startCapture();\r
++ frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);\r
++ }catch(Exception e){\r
++ e.printStackTrace();\r
++ }\r
++ }\r
++ public void onUpdate(boolean i_is_marker_exist,Transform3D i_transform3d)\r
++ {\r
++ /*\r
++ * TODO:Please write your behavior operation code here.\r
++ * \83}\81[\83J\81[\82Ì\8ep\90¨\82ð\8c³\82É\91¼\82Ì\82RD\83I\83u\83W\83F\83N\83g\82ð\91\80\8dì\82·\82é\82Æ\82«\82Í\81A\82±\82±\82É\8f\88\97\9d\82ð\8f\91\82«\82Ü\82·\81B*/\r
++ \r
++ }\r
++ public void startCapture() throws Exception\r
++ {\r
++ nya_behavior.start(); \r
++ }\r
++ public NyARJava3D() throws Exception\r
++ {\r
++ super("Java3D Example NyARToolkit");\r
++\r
++ //NyARToolkit\82Ì\8f\80\94õ\r
++ NyARCode ar_code =new NyARCode(16,16);\r
++ ar_code.loadFromARFile(CARCODE_FILE);\r
++ ar_param=new J3dNyARParam();\r
++ ar_param.loadFromARFile(PARAM_FILE);\r
++ ar_param.changeSize(320,240);\r
++ \r
++ //locale\82Ì\8dì\90¬\82Ælocate\82Æview\82Ì\90Ý\92è\r
++ universe = new VirtualUniverse();\r
++ locale = new Locale( universe );\r
++ canvas=new Canvas3D( SimpleUniverse.getPreferredConfiguration());\r
++ View view = new View();\r
++ ViewPlatform viewPlatform = new ViewPlatform();\r
++ view.attachViewPlatform( viewPlatform );\r
++ view.addCanvas3D(canvas);\r
++ view.setPhysicalBody( new PhysicalBody() );\r
++ view.setPhysicalEnvironment( new PhysicalEnvironment());\r
++\r
++ //\8e\8b\8aE\82Ì\90Ý\92è(\83J\83\81\83\89\90Ý\92è\82©\82ç\8eæ\93¾)\r
++ Transform3D camera_3d=ar_param.getCameraTransform();\r
++ view.setCompatibilityModeEnable(true);\r
++ view.setProjectionPolicy(View.PERSPECTIVE_PROJECTION);\r
++ view.setLeftProjection(camera_3d);\r
++ \r
++ //\8e\8b\93_\90Ý\92è(0,0,0\82©\82ç\81AY\8e²\82ð180\93x\89ñ\93]\82µ\82ÄZ+\95û\8cü\82ð\8cü\82\82æ\82¤\82É\82·\82é\81B)\r
++ TransformGroup viewGroup = new TransformGroup();\r
++ Transform3D viewTransform = new Transform3D();\r
++ viewTransform.rotY(Math.PI);\r
++ viewTransform.setTranslation(new Vector3d(0.0,0.0,0.0));\r
++ viewGroup.setTransform( viewTransform );\r
++ viewGroup.addChild( viewPlatform );\r
++ BranchGroup viewRoot = new BranchGroup();\r
++ viewRoot.addChild( viewGroup );\r
++ locale.addBranchGraph( viewRoot );\r
++\r
++ \r
++ //\83o\83b\83N\83O\83\89\83E\83\93\83h\82Ì\8dì\90¬\r
++ Background background =new Background();\r
++ BoundingSphere bounds = new BoundingSphere();\r
++ bounds.setRadius( 10.0 ); \r
++ background.setApplicationBounds(bounds);\r
++ background.setImageScaleMode(Background.SCALE_FIT_ALL);\r
++ background.setCapability(Background.ALLOW_IMAGE_WRITE);\r
++ BranchGroup root = new BranchGroup();\r
++ root.addChild(background);\r
++ \r
++ //TransformGroup\82Å\88Í\82Á\82½\83V\81[\83\93\83O\83\89\83t\82Ì\8dì\90¬\r
++ TransformGroup transform=new TransformGroup();\r
++ transform.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);\r
++ transform.addChild(createSceneGraph());\r
++ root.addChild(transform);\r
++ \r
++ //NyARToolkit\82ÌBehavior\82ð\8dì\82é\81B(\83}\81[\83J\81[\83T\83C\83Y\82Í\83\81\81[\83g\83\8b\82Å\8ew\92è\82·\82é\82±\82Æ)\r
++ nya_behavior=new NyARSingleMarkerBehaviorHolder(ar_param,30f,ar_code,0.08);\r
++ //Behavior\82É\98A\93®\82·\82é\83O\83\8b\81[\83v\82ð\83Z\83b\83g\r
++ nya_behavior.setTransformGroup(transform);\r
++ nya_behavior.setBackGround(background);\r
++ \r
++ //\8fo\97\88\82½behavior\82ð\83Z\83b\83g\r
++ root.addChild(nya_behavior.getBehavior());\r
++ nya_behavior.setUpdateListener(this);\r
++ \r
++ //\95\\8e¦\83u\83\89\83\93\83`\82ðLocate\82É\83Z\83b\83g\r
++ locale.addBranchGraph(root);\r
++ \r
++ //\83E\83C\83\93\83h\83E\82Ì\90Ý\92è\r
++ setLayout(new BorderLayout());\r
++ add(canvas,BorderLayout.CENTER);\r
++ }\r
++ /**\r
++ * \83V\81[\83\93\83O\83\89\83t\82ð\8dì\82Á\82Ä\81A\82»\82Ì\83m\81[\83h\82ð\95Ô\82·\81B\r
++ * \82±\82Ì\83m\81[\83h\82Í40mm\82Ì\90F\82Â\82«\83i\83^\83f\83R\83R\82ð\95\\8e¦\82·\82é\83V\81[\83\93\81B\82\9a\8e²\82ð\8aî\8f\80\82É20mm\8fã\82É\95\82\82©\82¹\82Ä\82é\81B\r
++ * @return\r
++ */\r
++ private Node createSceneGraph()\r
++ {\r
++ TransformGroup tg=new TransformGroup();\r
++ Transform3D mt=new Transform3D();\r
++ mt.setTranslation(new Vector3d(0.00,0.0,20*0.001));\r
++ // \91å\82«\82³ 40mm\82Ì\90F\95t\82«\97§\95û\91Ì\82ð\81AZ\8e²\8fã\82Å20mm\93®\82©\82µ\82Ä\94z\92u\81j\r
++ tg.setTransform(mt);\r
++ tg.addChild(new ColorCube(20*0.001));\r
++ return tg;\r
++ }\r
++}\r
+Index: D:/project.files/java.Lab/NyARToolKit/sample/jogl/JavaSimpleLite.java\r
+===================================================================\r
+--- D:/project.files/java.Lab/NyARToolKit/sample/jogl/JavaSimpleLite.java (revision 174)\r
++++ D:/project.files/java.Lab/NyARToolKit/sample/jogl/JavaSimpleLite.java (revision 178)\r
+@@ -1,217 +0,0 @@\r
+-/**\r
+- * simpleLite\82Æ\93¯\82¶\82æ\82¤\82È\83e\83X\83g\83v\83\8d\83O\83\89\83\80\r
+- * \83}\81[\83J\81[\82Ì\88ê\92v\93x\82Ì\8dÅ\92á\92l\82ð\83`\83F\83b\83N\82·\82é\82Æ\82±\82ë\82ð\94²\82¢\82½\82Ì\82Å\81A\93¯\82¶\83}\81[\83J\81[\82ð\91å\97Ê\82É\r
+- * \8c\9f\8fo\82·\82é\82Æ\96Ê\94\92\82¢\82±\82Æ\82É\82È\82è\82Ü\82·\81B\r
+- * (c)2008 R.iizuka\r
+- * airmail(at)ebony.plala.or.jp\r
+- * http://nyatla.jp/\r
+- */\r
+-import java.awt.event.WindowAdapter;\r
+-import java.awt.event.WindowEvent;\r
+-import java.awt.*;\r
+-\r
+-import javax.media.Buffer;\r
+-\r
+-import javax.media.opengl.GL;\r
+-import javax.media.opengl.GLAutoDrawable;\r
+-import javax.media.opengl.GLEventListener;\r
+-import javax.media.opengl.GLCanvas;\r
+-\r
+-import com.sun.opengl.util.Animator;\r
+-\r
+-import jp.nyatla.nyartoolkit.core.NyARCode;\r
+-\r
+-import jp.nyatla.nyartoolkit.jmf.JmfCameraCapture;\r
+-import jp.nyatla.nyartoolkit.jmf.JmfCaptureListener;\r
+-import jp.nyatla.nyartoolkit.gutil.*;\r
+-\r
+-\r
+-public class JavaSimpleLite implements GLEventListener,JmfCaptureListener\r
+-{\r
+- private final String CARCODE_FILE ="../../Data/patt.hiro";\r
+- private final String PARAM_FILE ="../../Data/camera_para.dat";\r
+- \r
+- \r
+- private Animator animator;\r
+- private GLNyARRaster_RGB cap_image;\r
+- \r
+- private JmfCameraCapture capture;\r
+- private GL gl;\r
+- //NyARToolkit\8aÖ\8cW\r
+- private GLNyARSingleDetectMarker nya;\r
+- private GLNyARParam ar_param;\r
+- /**\r
+- * \97§\95û\91Ì\82ð\8f\91\82\r
+- *\r
+- */\r
+- void drawCube()\r
+- {\r
+- // Colour cube data.\r
+- int polyList = 0;\r
+- float fSize = 0.5f;\r
+- int f, i; \r
+- float[][] cube_vertices=new float[][]{\r
+- {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
+- {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
+- };\r
+- float[][] cube_vertex_colors=new float[][]{\r
+- {1.0f, 1.0f, 1.0f}, {1.0f, 1.0f, 0.0f}, {0.0f, 1.0f, 0.0f}, {0.0f, 1.0f, 1.0f},\r
+- {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
+- };\r
+- int cube_num_faces = 6;\r
+- short[][] cube_faces =new short[][]{\r
+- {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
+- };\r
+- \r
+- if (polyList==0) {\r
+- polyList = gl.glGenLists (1);\r
+- gl.glNewList(polyList, GL.GL_COMPILE);\r
+- gl.glBegin(GL.GL_QUADS);\r
+- for (f = 0; f < cube_num_faces; f++)\r
+- for (i = 0; i < 4; i++) {\r
+- gl.glColor3f (cube_vertex_colors[cube_faces[f][i]][0], cube_vertex_colors[cube_faces[f][i]][1], cube_vertex_colors[cube_faces[f][i]][2]);\r
+- gl.glVertex3f(cube_vertices[cube_faces[f][i]][0] * fSize, cube_vertices[cube_faces[f][i]][1] * fSize, cube_vertices[cube_faces[f][i]][2] * fSize);\r
+- }\r
+- gl.glEnd();\r
+- gl.glColor3f(0.0f, 0.0f, 0.0f);\r
+- for (f = 0; f < cube_num_faces; f++) {\r
+- gl.glBegin (GL.GL_LINE_LOOP);\r
+- for (i = 0; i < 4; i++)\r
+- gl.glVertex3f(cube_vertices[cube_faces[f][i]][0] * fSize, cube_vertices[cube_faces[f][i]][1] * fSize, cube_vertices[cube_faces[f][i]][2] * fSize);\r
+- gl.glEnd ();\r
+- }\r
+- gl.glEndList ();\r
+- }\r
+- \r
+- gl.glPushMatrix(); // Save world coordinate system.\r
+- gl.glTranslatef(0.0f, 0.0f, 0.5f); // Place base of cube on marker surface.\r
+- gl.glRotatef(0.0f, 0.0f, 0.0f, 1.0f); // Rotate about z axis.\r
+- gl.glDisable(GL.GL_LIGHTING); // Just use colours.\r
+- gl.glCallList(polyList); // Draw the cube.\r
+- gl.glPopMatrix(); // Restore world coordinate system.\r
+- \r
+- }\r
+- \r
+- \r
+- \r
+- public JavaSimpleLite()\r
+- {\r
+- Frame frame = new Frame("Java simpleLite with NyARToolkit");\r
+-\r
+-\r
+- // 3D\82ð\95`\89æ\82·\82é\83R\83\93\83|\81[\83l\83\93\83g\r
+- GLCanvas canvas = new GLCanvas();\r
+- frame.add(canvas);\r
+- canvas.addGLEventListener(this);\r
+- frame.addWindowListener(new WindowAdapter() {\r
+- public void windowClosing(WindowEvent e) {\r
+- System.exit(0);\r
+- }\r
+- });\r
+-\r
+- frame.setVisible(true);\r
+- Insets ins=frame.getInsets();\r
+- frame.setSize(320+ins.left+ins.right,240+ins.top+ins.bottom);\r
+- canvas.setBounds(ins.left,ins.top,320,240);\r
+- }\r
+-\r
+- public void init(GLAutoDrawable drawable) {\r
+- gl = drawable.getGL();\r
+- gl.glClearColor(0.0f, 0.0f, 0.0f, 0.0f);\r
+- //NyARToolkit\82Ì\8f\80\94õ\r
+- try{\r
+- //\83L\83\83\83v\83`\83\83\82Ì\8f\80\94õ\r
+- capture=new JmfCameraCapture(320,240,15f,JmfCameraCapture.PIXEL_FORMAT_RGB);\r
+- capture.setCaptureListener(this);\r
+- //NyARToolkit\82Ì\8f\80\94õ\r
+- ar_param=new GLNyARParam();\r
+- NyARCode ar_code =new NyARCode(16,16);\r
+- ar_param.loadFromARFile(PARAM_FILE);\r
+- ar_param.changeSize(320,240);\r
+- nya=new GLNyARSingleDetectMarker(ar_param,ar_code,80.0);\r
+- ar_code.loadFromARFile(CARCODE_FILE);\r
+- //GL\91Î\89\9e\82ÌRGB\83\89\83X\83^\83I\83u\83W\83F\83N\83g\r
+- cap_image=new GLNyARRaster_RGB(gl,ar_param);\r
+- //\83L\83\83\83v\83`\83\83\8aJ\8en\r
+- capture.start();\r
+- }catch(Exception e){\r
+- e.printStackTrace();\r
+- }\r
+- animator = new Animator(drawable);\r
+-\r
+- animator.start();\r
+-\r
+- }\r
+-\r
+- public void reshape(GLAutoDrawable drawable,\r
+- int x, int y,\r
+- int width, int height)\r
+- {\r
+- float ratio = (float)height / (float)width;\r
+- gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);\r
+- gl.glViewport(0, 0, width, height);\r
+-\r
+- //\8e\8b\91Ì\90Ï\82Ì\90Ý\92è\r
+- gl.glMatrixMode(GL.GL_PROJECTION);\r
+- gl.glLoadIdentity();\r
+- gl.glFrustum(-1.0f, 1.0f, -ratio, ratio,\r
+- 5.0f, 40.0f);\r
+- //\8c©\82é\88Ê\92u\r
+- gl.glMatrixMode(GL.GL_MODELVIEW);\r
+- gl.glLoadIdentity();\r
+- gl.glTranslatef(0.0f, 0.0f, -10.0f);\r
+- }\r
+-\r
+- public void display(GLAutoDrawable drawable)\r
+- {\r
+- \r
+- try{\r
+- if(!cap_image.hasData()){\r
+- return;\r
+- } \r
+- gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT); // Clear the buffers for new frame. \r
+- //\89æ\91\9c\83`\83F\83b\83N\82µ\82Ä\83}\81[\83J\81[\92T\82µ\82Ä\81A\94w\8ci\82ð\8f\91\82\r
+- boolean is_marker_exist;\r
+- synchronized(cap_image){\r
+- is_marker_exist=nya.detectMarkerLite(cap_image,100);\r
+- //\94w\8ci\82ð\8f\91\82\r
+- cap_image.glDispImage(1.0);\r
+- }\r
+- //\82 \82Á\82½\82ç\97§\95û\91Ì\82ð\8f\91\82\r
+- if(is_marker_exist){\r
+- // Projection transformation.\r
+- gl.glMatrixMode(GL.GL_PROJECTION);\r
+- gl.glLoadMatrixd(ar_param.getCameraFrustumRH(),0);\r
+- gl.glMatrixMode(GL.GL_MODELVIEW);\r
+- // Viewing transformation.\r
+- gl.glLoadIdentity();\r
+- gl.glLoadMatrixd(nya.getCameraViewRH(),0);\r
+-\r
+- \r
+- // All other lighting and geometry goes here.\r
+- drawCube();\r
+- }\r
+- }catch(Exception e){\r
+- e.printStackTrace();\r
+- }\r
+- }\r
+- public void onUpdateBuffer(Buffer i_buffer)\r
+- {\r
+- try{\r
+- synchronized(cap_image){\r
+- cap_image.setBuffer(i_buffer, true);\r
+- }\r
+- }catch(Exception e){\r
+- e.printStackTrace();\r
+- } \r
+- }\r
+-\r
+- public void displayChanged(GLAutoDrawable drawable,\r
+- boolean modeChanged,\r
+- boolean deviceChanged) {}\r
+-\r
+- public static void main(String[] args) {\r
+- new JavaSimpleLite();\r
+- }\r
+-}\r
+-\r
+Index: D:/project.files/java.Lab/NyARToolKit/sample/jogl/jp/nyatla/nyartoolkit/jogl/utils/GLNyARRaster_RGB.java\r
+===================================================================\r
+--- D:/project.files/java.Lab/NyARToolKit/sample/jogl/jp/nyatla/nyartoolkit/jogl/utils/GLNyARRaster_RGB.java (revision 0)\r
++++ D:/project.files/java.Lab/NyARToolKit/sample/jogl/jp/nyatla/nyartoolkit/jogl/utils/GLNyARRaster_RGB.java (revision 178)\r
+@@ -0,0 +1,76 @@\r
++/**\r
++ * NyARRaster_RGB\82ÉOpenGL\97p\82Ì\83f\81[\83^\95Ï\8a·\8b@\94\\82ð\92Ç\89Á\82µ\82½\82à\82Ì\82Å\82·\81B\r
++ * \r
++ * (c)2008 A\8cÕ\81\97nyatla.jp\r
++ * airmail(at)ebony.plala.or.jp\r
++ * http://nyatla.jp/\r
++ */\r
++package jp.nyatla.nyartoolkit.jogl.utils;\r
++\r
++import javax.media.format.RGBFormat;\r
++import javax.media.opengl.GL;\r
++import jp.nyatla.nyartoolkit.NyARException;\r
++import jp.nyatla.nyartoolkit.jmf.utils.*;\r
++import jp.nyatla.nyartoolkit.core.*;\r
++\r
++public class GLNyARRaster_RGB extends JmfNyARRaster_RGB\r
++{\r
++ private byte[] gl_buf;\r
++ private int gl_flag;\r
++\r
++ public GLNyARRaster_RGB(GL i_ref_gl,NyARParam i_param)\r
++ {\r
++ super(i_param.getX(),i_param.getY());\r
++ this.gl_flag=GL.GL_RGB;\r
++ this.gl_buf=new byte[this.width*this.height*3];\r
++ }\r
++ public void setBuffer(javax.media.Buffer i_buffer,boolean i_is_reverse) throws NyARException\r
++ {\r
++ //JMF\83f\81[\83^\82Å\83t\83H\81[\83}\83b\83g\83v\83\8d\83p\83e\83B\82ð\8f\89\8aú\89»\r
++ initFormatProperty((RGBFormat)i_buffer.getFormat());\r
++ \r
++ byte[] src_buf=(byte[])i_buffer.getData();\r
++ //GL\97p\82Ì\83f\81[\83^\82ð\8f\80\94õ\r
++ if(i_is_reverse){\r
++ int length=this.width*3;\r
++ int src_idx=0;\r
++ int dest_idx=(this.height-1)*length;\r
++ for(int i=0;i<this.height;i++){\r
++ System.arraycopy(src_buf,src_idx,this.gl_buf,dest_idx,length);\r
++ src_idx+=length;\r
++ dest_idx-=length;\r
++ }\r
++ }else{\r
++ System.arraycopy(src_buf,0,gl_buf,0,src_buf.length);\r
++ }\r
++ //GL\82Ì\83t\83\89\83O\90Ý\92è\r
++ switch(this.pix_type){\r
++ case GLNyARRaster_RGB.PIXEL_ORDER_BGR:\r
++ this.gl_flag=GL.GL_BGR;\r
++ break;\r
++ case GLNyARRaster_RGB.PIXEL_ORDER_RGB:\r
++ this.gl_flag=GL.GL_RGB;\r
++ break;\r
++ default:\r
++ throw new NyARException();\r
++ }\r
++ //ref_buf\82ðgl_buf\82É\8d·\82µ\91Ö\82¦\82é\r
++ ref_buf=gl_buf;\r
++ }\r
++ /**\r
++ * GL\82Å\82»\82Ì\82Ü\82Ü\95`\89æ\82Å\82«\82éRGB\83o\83b\83t\83@\82ð\95Ô\82·\81B\r
++ * @return\r
++ */\r
++ public byte[] getGLRgbArray()\r
++ {\r
++ return this.ref_buf;\r
++ }\r
++ /**\r
++ * GL\97p\82ÌRGB\83o\83b\83t\83@\82Ì\83o\83C\83g\95À\82Ñ\83^\83C\83v\82ð\95Ô\82·\81B\r
++ * @return\r
++ */\r
++ public int getGLPixelFlag()\r
++ {\r
++ return this.gl_flag;\r
++ }\r
++}\r
+Index: D:/project.files/java.Lab/NyARToolKit/sample/jogl/jp/nyatla/nyartoolkit/jogl/utils/GLNyARSingleDetectMarker.java\r
+===================================================================\r
+--- D:/project.files/java.Lab/NyARToolKit/sample/jogl/jp/nyatla/nyartoolkit/jogl/utils/GLNyARSingleDetectMarker.java (revision 0)\r
++++ D:/project.files/java.Lab/NyARToolKit/sample/jogl/jp/nyatla/nyartoolkit/jogl/utils/GLNyARSingleDetectMarker.java (revision 178)\r
+@@ -0,0 +1,57 @@\r
++/**\r
++ * NyARSingleDetectMarker\82ÉOpenGL\8cü\82¯\8aÖ\90\94\82ð\92Ç\89Á\82µ\82½\82à\82Ì\r
++ * (c)2008 A\8cÕ\81\97nyatla.jp\r
++ * airmail(at)ebony.plala.or.jp\r
++ * http://nyatla.jp/\r
++ */\r
++package jp.nyatla.nyartoolkit.jogl.utils;\r
++\r
++import jp.nyatla.nyartoolkit.NyARException;\r
++import jp.nyatla.nyartoolkit.core.NyARCode;\r
++import jp.nyatla.nyartoolkit.core.NyARMat;\r
++import jp.nyatla.nyartoolkit.core.NyARParam;\r
++import jp.nyatla.nyartoolkit.detector.*;\r
++\r
++public class GLNyARSingleDetectMarker extends NyARSingleDetectMarker\r
++{\r
++ private double view_scale_factor=0.025;//#define VIEW_SCALEFACTOR 0.025 // 1.0 ARToolKit unit becomes 0.025 of my OpenGL units.\r
++ public GLNyARSingleDetectMarker(NyARParam i_param,NyARCode i_code,double i_marker_width)\r
++ {\r
++ super(i_param,i_code,i_marker_width); \r
++ }\r
++ public void setScaleFactor(double i_new_value)\r
++ {\r
++ view_scale_factor=i_new_value;\r
++ }\r
++ // public static void arglCameraViewRH(const double para[3][4], GLdouble m_modelview[16], const double scale)\r
++ public double[] getCameraViewRH() throws NyARException\r
++ {\r
++ //\8dÀ\95W\82ð\8cv\8eZ\r
++ NyARMat mat=getTransmationMatrix();\r
++ //\8ds\97ñ\95Ï\8a·\r
++ double[][] para=mat.getArray();\r
++ double[] result=new double[16];\r
++ result[0 + 0*4] = para[0][0]; // R1C1\r
++ result[0 + 1*4] = para[0][1]; // R1C2\r
++ result[0 + 2*4] = para[0][2];\r
++ result[0 + 3*4] = para[0][3];\r
++ result[1 + 0*4] = -para[1][0]; // R2\r
++ result[1 + 1*4] = -para[1][1];\r
++ result[1 + 2*4] = -para[1][2];\r
++ result[1 + 3*4] = -para[1][3];\r
++ result[2 + 0*4] = -para[2][0]; // R3\r
++ result[2 + 1*4] = -para[2][1];\r
++ result[2 + 2*4] = -para[2][2];\r
++ result[2 + 3*4] = -para[2][3];\r
++ result[3 + 0*4] = 0.0;\r
++ result[3 + 1*4] = 0.0;\r
++ result[3 + 2*4] = 0.0;\r
++ result[3 + 3*4] = 1.0;\r
++ if (view_scale_factor != 0.0) {\r
++ result[12] *= view_scale_factor;\r
++ result[13] *= view_scale_factor;\r
++ result[14] *= view_scale_factor;\r
++ }\r
++ return result;\r
++ }\r
++}\r
+Index: D:/project.files/java.Lab/NyARToolKit/sample/jogl/jp/nyatla/nyartoolkit/jogl/utils/NyARGLUtil.java\r
+===================================================================\r
+--- D:/project.files/java.Lab/NyARToolKit/sample/jogl/jp/nyatla/nyartoolkit/jogl/utils/NyARGLUtil.java (revision 0)\r
++++ D:/project.files/java.Lab/NyARToolKit/sample/jogl/jp/nyatla/nyartoolkit/jogl/utils/NyARGLUtil.java (revision 178)\r
+@@ -0,0 +1,99 @@\r
++/**\r
++ * NyARToolkit\97p\82ÌJOGL\8ex\89\87\8aÖ\90\94\8cQ\r
++ * (c)2008 A\8cÕ\81\97nyatla.jp\r
++ * airmail(at)ebony.plala.or.jp\r
++ * http://nyatla.jp/\r
++ */\r
++package jp.nyatla.nyartoolkit.jogl.utils;\r
++import java.nio.ByteBuffer;\r
++import java.nio.IntBuffer;\r
++\r
++import javax.media.opengl.GL;\r
++import javax.media.opengl.glu.GLU;\r
++\r
++import jp.nyatla.nyartoolkit.core.*;\r
++\r
++public class NyARGLUtil\r
++{\r
++ private NyARParam ar_param;\r
++ private javax.media.opengl.GL gl;\r
++ private javax.media.opengl.glu.GLU glu;\r
++ public NyARGLUtil(javax.media.opengl.GL i_gl,NyARParam i_camera_param)\r
++ {\r
++ this.ar_param=i_camera_param;\r
++ this.gl=i_gl;\r
++ this.glu=new GLU();\r
++ }\r
++ /**\r
++ * GLNyARRaster_RGB\82ð\83o\83b\83N\83O\83\89\83E\83\93\83h\82É\8f\91\82«\8fo\82·\81B\r
++ * @param image\r
++ * @param zoom\r
++ */\r
++ public void drawBackGround(GLNyARRaster_RGB i_raster,double i_zoom)\r
++ {\r
++ IntBuffer texEnvModeSave=IntBuffer.allocate(1); \r
++ boolean lightingSave;\r
++ boolean depthTestSave;\r
++ javax.media.opengl.GL gl_=this.gl;\r
++ \r
++ // Prepare an orthographic projection, set camera position for 2D drawing, and save GL state.\r
++ gl_.glGetTexEnviv(GL.GL_TEXTURE_ENV, GL.GL_TEXTURE_ENV_MODE, texEnvModeSave); // Save GL texture environment mode.\r
++ if (texEnvModeSave.array()[0] != GL.GL_REPLACE){\r
++ gl_.glTexEnvi(GL.GL_TEXTURE_ENV, GL.GL_TEXTURE_ENV_MODE, GL.GL_REPLACE);\r
++ }\r
++ lightingSave = gl_.glIsEnabled(GL.GL_LIGHTING); // Save enabled state of lighting.\r
++ if (lightingSave == true){\r
++ gl_.glDisable(GL.GL_LIGHTING);\r
++ }\r
++ depthTestSave = gl_.glIsEnabled(GL.GL_DEPTH_TEST); // Save enabled state of depth test.\r
++ if (depthTestSave == true){\r
++ gl_.glDisable(GL.GL_DEPTH_TEST);\r
++ }\r
++ gl_.glMatrixMode(GL.GL_PROJECTION);\r
++ gl_.glPushMatrix();\r
++ gl_.glLoadIdentity();\r
++ glu.gluOrtho2D(0.0,ar_param.getX(),0.0,ar_param.getY());\r
++ gl_.glMatrixMode(GL.GL_MODELVIEW);\r
++ gl_.glPushMatrix();\r
++ gl_.glLoadIdentity();\r
++ arglDispImageStateful(i_raster,i_zoom);\r
++\r
++\r
++ // Restore previous projection, camera position, and GL state.\r
++ gl_.glMatrixMode(GL.GL_PROJECTION);\r
++ gl_.glPopMatrix();\r
++ gl_.glMatrixMode(GL.GL_MODELVIEW);\r
++ gl_.glPopMatrix();\r
++ if (depthTestSave){\r
++ gl_.glEnable(GL.GL_DEPTH_TEST); // Restore enabled state of depth test.\r
++ }\r
++ if (lightingSave){\r
++ gl_.glEnable(GL.GL_LIGHTING); // Restore enabled state of lighting.\r
++ }\r
++ if (texEnvModeSave.get(0) != GL.GL_REPLACE){\r
++ gl_.glTexEnvi(GL.GL_TEXTURE_ENV, GL.GL_TEXTURE_ENV_MODE, texEnvModeSave.get(0)); // Restore GL texture environment mode.\r
++ }\r
++ gl_.glEnd();\r
++ }\r
++ /**\r
++ * arglDispImageStateful\8aÖ\90\94\83\82\83h\83L\r
++ * @param image\r
++ * @param zoom\r
++ */\r
++ private void arglDispImageStateful(GLNyARRaster_RGB i_raster,double zoom)\r
++ {\r
++ javax.media.opengl.GL gl_=this.gl;\r
++ int width =i_raster.getWidth();\r
++ int height=i_raster.getHeight();\r
++ float zoomf;\r
++ IntBuffer params=IntBuffer.allocate(4);\r
++ zoomf = (float)zoom;\r
++ gl_.glDisable(GL.GL_TEXTURE_2D);\r
++ gl_.glGetIntegerv(GL.GL_VIEWPORT,params);\r
++ gl_.glPixelZoom(zoomf * ((float)(params.get(2)) / (float)width),-zoomf * ((float)(params.get(3)) / (float)height));\r
++ gl_.glRasterPos2f(0.0f,(float)height);\r
++ gl_.glPixelStorei(GL.GL_UNPACK_ALIGNMENT, 1);\r
++ ByteBuffer buf=ByteBuffer.wrap(i_raster.getGLRgbArray());\r
++ gl_.glDrawPixels(width,height,i_raster.getGLPixelFlag(),GL.GL_UNSIGNED_BYTE,buf);\r
++ } \r
++}\r
+Index: D:/project.files/java.Lab/NyARToolKit/sample/jogl/jp/nyatla/nyartoolkit/jogl/utils/GLNyARParam.java\r
+===================================================================\r
+--- D:/project.files/java.Lab/NyARToolKit/sample/jogl/jp/nyatla/nyartoolkit/jogl/utils/GLNyARParam.java (revision 0)\r
++++ D:/project.files/java.Lab/NyARToolKit/sample/jogl/jp/nyatla/nyartoolkit/jogl/utils/GLNyARParam.java (revision 178)\r
+@@ -0,0 +1,99 @@\r
++/**\r
++ * NyARParam\82ÉOpenGL\8cü\82¯\8aÖ\90\94\82ð\92Ç\89Á\82µ\82½\82à\82Ì\r
++ * (c)2008 A\8cÕ\81\97nyatla.jp\r
++ * airmail(at)ebony.plala.or.jp\r
++ * http://nyatla.jp/\r
++ */\r
++package jp.nyatla.nyartoolkit.jogl.utils;\r
++\r
++import jp.nyatla.nyartoolkit.core.*;\r
++public class GLNyARParam extends NyARParam\r
++{\r
++ private double view_distance_min=0.1;//#define VIEW_DISTANCE_MIN 0.1 // Objects closer to the camera than this will not be displayed.\r
++ private double view_distance_max=100.0;//#define VIEW_DISTANCE_MAX 100.0 // Objects further away from the camera than this will not be displayed.\r
++ private double[] m_projection=null;\r
++ public void setViewDistanceMin(double i_new_value)\r
++ {\r
++ m_projection=null;//\83L\83\83\83b\83V\83\85\8dÏ\95Ï\90\94\8f\89\8aú\89»\r
++ view_distance_min=i_new_value;\r
++ }\r
++ public void setViewDistanceMax(double i_new_value)\r
++ {\r
++ m_projection=null;//\83L\83\83\83b\83V\83\85\8dÏ\95Ï\90\94\8f\89\8aú\89»\r
++ view_distance_max=i_new_value;\r
++ }\r
++ /**\r
++ * void arglCameraFrustumRH(const ARParam *cparam, const double focalmin, const double focalmax, GLdouble m_projection[16])\r
++ * \8aÖ\90\94\82Ì\92u\82«\8a·\82¦\r
++ * @param focalmin\r
++ * @param focalmax\r
++ * @return\r
++ */\r
++ public double[] getCameraFrustumRH()\r
++ {\r
++ //\8aù\82É\92l\82ª\83L\83\83\83b\83V\83\85\82³\82ê\82Ä\82¢\82½\82ç\82»\82ê\82ð\8eg\82¤\r
++ if(m_projection!=null){\r
++ return m_projection;\r
++ }\r
++ //\96³\82¯\82ê\82Î\8cv\8eZ\r
++ m_projection=new double[16];\r
++ NyARMat trans_mat=new NyARMat(3,4);\r
++ NyARMat icpara_mat=new NyARMat(3,4);\r
++ double[][] p=new double[3][3], q=new double[4][4];\r
++ int width, height;\r
++ int i, j;\r
++ \r
++ width = xsize;\r
++ height = ysize;\r
++ \r
++ decompMat(icpara_mat,trans_mat);\r
++\r
++ double[][] icpara=icpara_mat.getArray();\r
++ double[][] trans=trans_mat.getArray();\r
++ for (i = 0; i < 4; i++) {\r
++ icpara[1][i] = (height - 1)*(icpara[2][i]) - icpara[1][i];\r
++ }\r
++ \r
++ for(i = 0; i < 3; i++) {\r
++ for(j = 0; j < 3; j++) {\r
++ p[i][j] = icpara[i][j] / icpara[2][2];\r
++ }\r
++ }\r
++ q[0][0] = (2.0 * p[0][0] / (width - 1));\r
++ q[0][1] = (2.0 * p[0][1] / (width - 1));\r
++ q[0][2] = -((2.0 * p[0][2] / (width - 1)) - 1.0);\r
++ q[0][3] = 0.0;\r
++ \r
++ q[1][0] = 0.0;\r
++ q[1][1] = -(2.0 * p[1][1] / (height - 1));\r
++ q[1][2] = -((2.0 * p[1][2] / (height - 1)) - 1.0);\r
++ q[1][3] = 0.0;\r
++ \r
++ q[2][0] = 0.0;\r
++ q[2][1] = 0.0;\r
++ q[2][2] = (view_distance_max + view_distance_min)/(view_distance_min - view_distance_max);\r
++ q[2][3] = 2.0 * view_distance_max * view_distance_min / (view_distance_min - view_distance_max);\r
++ \r
++ q[3][0] = 0.0;\r
++ q[3][1] = 0.0;\r
++ q[3][2] = -1.0;\r
++ q[3][3] = 0.0;\r
++ \r
++ for (i = 0; i < 4; i++) { // Row.\r
++ // First 3 columns of the current row.\r
++ for (j = 0; j < 3; j++) { // Column.\r
++ m_projection[i + j*4] =\r
++ q[i][0] * trans[0][j] +\r
++ q[i][1] * trans[1][j] +\r
++ q[i][2] * trans[2][j];\r
++ }\r
++ // Fourth column of the current row.\r
++ m_projection[i + 3*4]=\r
++ q[i][0] * trans[0][3] +\r
++ q[i][1] * trans[1][3] +\r
++ q[i][2] * trans[2][3] +\r
++ q[i][3];\r
++ }\r
++ return m_projection;\r
++ }\r
++}\r
+Index: D:/project.files/java.Lab/NyARToolKit/sample/jogl/jp/nyatla/nyartoolkit/jogl/sample/JavaSimpleLite.java\r
+===================================================================\r
+--- D:/project.files/java.Lab/NyARToolKit/sample/jogl/jp/nyatla/nyartoolkit/jogl/sample/JavaSimpleLite.java (revision 0)\r
++++ D:/project.files/java.Lab/NyARToolKit/sample/jogl/jp/nyatla/nyartoolkit/jogl/sample/JavaSimpleLite.java (revision 178)\r
+@@ -0,0 +1,222 @@\r
++/**\r
++ * simpleLite\82Æ\93¯\82¶\82æ\82¤\82È\83e\83X\83g\83v\83\8d\83O\83\89\83\80\r
++ * \83}\81[\83J\81[\82Ì\88ê\92v\93x\82Ì\8dÅ\92á\92l\82ð\83`\83F\83b\83N\82·\82é\82Æ\82±\82ë\82ð\94²\82¢\82½\82Ì\82Å\81A\93¯\82¶\83}\81[\83J\81[\82ð\91å\97Ê\82É\r
++ * \8c\9f\8fo\82·\82é\82Æ\96Ê\94\92\82¢\82±\82Æ\82É\82È\82è\82Ü\82·\81B\r
++ * (c)2008 A\8cÕ\81\97nyatla.jp\r
++ * airmail(at)ebony.plala.or.jp\r
++ * http://nyatla.jp/\r
++ */\r
++package jp.nyatla.nyartoolkit.jogl.sample;\r
++\r
++import java.awt.event.WindowAdapter;\r
++import java.awt.event.WindowEvent;\r
++import java.awt.*;\r
++\r
++import javax.media.Buffer;\r
++\r
++import javax.media.opengl.GL;\r
++import javax.media.opengl.GLAutoDrawable;\r
++import javax.media.opengl.GLEventListener;\r
++import javax.media.opengl.GLCanvas;\r
++\r
++import com.sun.opengl.util.Animator;\r
++\r
++import jp.nyatla.nyartoolkit.core.NyARCode;\r
++\r
++import jp.nyatla.nyartoolkit.jmf.utils.JmfCameraCapture;\r
++import jp.nyatla.nyartoolkit.jmf.utils.JmfCaptureListener;\r
++import jp.nyatla.nyartoolkit.jogl.utils.*;\r
++\r
++\r
++public class JavaSimpleLite implements GLEventListener,JmfCaptureListener\r
++{\r
++ private final String CARCODE_FILE ="../../Data/patt.hiro";\r
++ private final String PARAM_FILE ="../../Data/camera_para.dat";\r
++ \r
++ private final static int SCREEN_X=320;\r
++ private final static int SCREEN_Y=240;\r
++ private Animator animator;\r
++ private GLNyARRaster_RGB cap_image;\r
++ \r
++ private JmfCameraCapture capture;\r
++ private GL gl;\r
++ private NyARGLUtil glnya;\r
++\r
++\r
++ //NyARToolkit\8aÖ\8cW\r
++ private GLNyARSingleDetectMarker nya;\r
++ private GLNyARParam ar_param;\r
++ /**\r
++ * \97§\95û\91Ì\82ð\8f\91\82\r
++ *\r
++ */\r
++ void drawCube()\r
++ {\r
++ // Colour cube data.\r
++ int polyList = 0;\r
++ float fSize = 0.5f;//\83}\81[\83J\81[\83T\83C\83Y\82É\91Î\82µ\82Ä0.5\94{\82È\82Ì\82Å\81A4cm\82Ì\83i\83^\83f\83R\83R\r
++ int f, i; \r
++ float[][] cube_vertices=new float[][]{\r
++ {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
++ {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
++ };\r
++ float[][] cube_vertex_colors=new float[][]{\r
++ {1.0f, 1.0f, 1.0f}, {1.0f, 1.0f, 0.0f}, {0.0f, 1.0f, 0.0f}, {0.0f, 1.0f, 1.0f},\r
++ {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
++ };\r
++ int cube_num_faces = 6;\r
++ short[][] cube_faces =new short[][]{\r
++ {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
++ };\r
++ \r
++ if (polyList==0) {\r
++ polyList = gl.glGenLists (1);\r
++ gl.glNewList(polyList, GL.GL_COMPILE);\r
++ gl.glBegin(GL.GL_QUADS);\r
++ for (f = 0; f < cube_num_faces; f++)\r
++ for (i = 0; i < 4; i++) {\r
++ gl.glColor3f (cube_vertex_colors[cube_faces[f][i]][0], cube_vertex_colors[cube_faces[f][i]][1], cube_vertex_colors[cube_faces[f][i]][2]);\r
++ gl.glVertex3f(cube_vertices[cube_faces[f][i]][0] * fSize, cube_vertices[cube_faces[f][i]][1] * fSize, cube_vertices[cube_faces[f][i]][2] * fSize);\r
++ }\r
++ gl.glEnd();\r
++ gl.glColor3f(0.0f, 0.0f, 0.0f);\r
++ for (f = 0; f < cube_num_faces; f++) {\r
++ gl.glBegin (GL.GL_LINE_LOOP);\r
++ for (i = 0; i < 4; i++)\r
++ gl.glVertex3f(cube_vertices[cube_faces[f][i]][0] * fSize, cube_vertices[cube_faces[f][i]][1] * fSize, cube_vertices[cube_faces[f][i]][2] * fSize);\r
++ gl.glEnd ();\r
++ }\r
++ gl.glEndList ();\r
++ }\r
++ \r
++ gl.glPushMatrix(); // Save world coordinate system.\r
++ gl.glTranslatef(0.0f, 0.0f, 0.5f); // Place base of cube on marker surface.\r
++ gl.glRotatef(0.0f, 0.0f, 0.0f, 1.0f); // Rotate about z axis.\r
++ gl.glDisable(GL.GL_LIGHTING); // Just use colours.\r
++ gl.glCallList(polyList); // Draw the cube.\r
++ gl.glPopMatrix(); // Restore world coordinate system.\r
++ \r
++ }\r
++ \r
++ \r
++ \r
++ public JavaSimpleLite()\r
++ {\r
++ Frame frame = new Frame("Java simpleLite with NyARToolkit");\r
++\r
++\r
++ // 3D\82ð\95`\89æ\82·\82é\83R\83\93\83|\81[\83l\83\93\83g\r
++ GLCanvas canvas = new GLCanvas();\r
++ frame.add(canvas);\r
++ canvas.addGLEventListener(this);\r
++ frame.addWindowListener(new WindowAdapter() {\r
++ public void windowClosing(WindowEvent e) {\r
++ System.exit(0);\r
++ }\r
++ });\r
++\r
++ frame.setVisible(true);\r
++ Insets ins=frame.getInsets();\r
++ frame.setSize(SCREEN_X+ins.left+ins.right,SCREEN_Y+ins.top+ins.bottom);\r
++ canvas.setBounds(ins.left,ins.top,SCREEN_X,SCREEN_Y);\r
++ }\r
++\r
++ public void init(GLAutoDrawable drawable) {\r
++ gl = drawable.getGL();\r
++ gl.glClearColor(0.0f, 0.0f, 0.0f, 0.0f);\r
++ //NyARToolkit\82Ì\8f\80\94õ\r
++ try{\r
++ //\83L\83\83\83v\83`\83\83\82Ì\8f\80\94õ\r
++ capture=new JmfCameraCapture(320,240,15f,JmfCameraCapture.PIXEL_FORMAT_RGB);\r
++ capture.setCaptureListener(this);\r
++ //NyARToolkit\82Ì\8f\80\94õ\r
++ ar_param=new GLNyARParam();\r
++ NyARCode ar_code =new NyARCode(16,16);\r
++ ar_param.loadFromARFile(PARAM_FILE);\r
++ ar_param.changeSize(SCREEN_X,SCREEN_Y);\r
++ nya=new GLNyARSingleDetectMarker(ar_param,ar_code,80.0);\r
++ ar_code.loadFromARFile(CARCODE_FILE);\r
++ //NyARToolkit\97p\82Ì\8ex\89\87\83N\83\89\83X\r
++ glnya=new NyARGLUtil(gl,ar_param);\r
++ //GL\91Î\89\9e\82ÌRGB\83\89\83X\83^\83I\83u\83W\83F\83N\83g\r
++ cap_image=new GLNyARRaster_RGB(gl,ar_param);\r
++ //\83L\83\83\83v\83`\83\83\8aJ\8en\r
++ capture.start();\r
++ }catch(Exception e){\r
++ e.printStackTrace();\r
++ }\r
++ animator = new Animator(drawable);\r
++\r
++ animator.start();\r
++\r
++ }\r
++\r
++ public void reshape(GLAutoDrawable drawable,\r
++ int x, int y,\r
++ int width, int height)\r
++ {\r
++ gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);\r
++ gl.glViewport(0, 0, width, height);\r
++\r
++ //\8e\8b\91Ì\90Ï\82Ì\90Ý\92è\r
++ gl.glMatrixMode(GL.GL_PROJECTION);\r
++ gl.glLoadIdentity();\r
++ //\8c©\82é\88Ê\92u\r
++ gl.glMatrixMode(GL.GL_MODELVIEW);\r
++ gl.glLoadIdentity();\r
++ }\r
++\r
++ public void display(GLAutoDrawable drawable)\r
++ {\r
++ \r
++ try{\r
++ if(!cap_image.hasData()){\r
++ return;\r
++ } \r
++ gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT); // Clear the buffers for new frame. \r
++ //\89æ\91\9c\83`\83F\83b\83N\82µ\82Ä\83}\81[\83J\81[\92T\82µ\82Ä\81A\94w\8ci\82ð\8f\91\82\r
++ boolean is_marker_exist;\r
++ synchronized(cap_image){\r
++ is_marker_exist=nya.detectMarkerLite(cap_image,100);\r
++ //\94w\8ci\82ð\8f\91\82\r
++ glnya.drawBackGround(cap_image, 1.0);\r
++ }\r
++ //\82 \82Á\82½\82ç\97§\95û\91Ì\82ð\8f\91\82\r
++ if(is_marker_exist){\r
++ //\83}\81[\83J\81[\82Ì\88ê\92v\93x\82ð\92²\8d¸\82·\82é\82È\82ç\82Î\81A\82±\82±\82Ånya.getConfidence()\82Å\88ê\92v\93x\82ð\92²\82×\82Ä\89º\82³\82¢\81B\r
++ // Projection transformation.\r
++ gl.glMatrixMode(GL.GL_PROJECTION);\r
++ gl.glLoadMatrixd(ar_param.getCameraFrustumRH(),0);\r
++ gl.glMatrixMode(GL.GL_MODELVIEW);\r
++ // Viewing transformation.\r
++ gl.glLoadIdentity();\r
++ gl.glLoadMatrixd(nya.getCameraViewRH(),0);\r
++\r
++ \r
++ // All other lighting and geometry goes here.\r
++ drawCube();\r
++ }\r
++ }catch(Exception e){\r
++ e.printStackTrace();\r
++ }\r
++ }\r
++ public void onUpdateBuffer(Buffer i_buffer)\r
++ {\r
++ try{\r
++ synchronized(cap_image){\r
++ cap_image.setBuffer(i_buffer, true);\r
++ }\r
++ }catch(Exception e){\r
++ e.printStackTrace();\r
++ } \r
++ }\r
++\r
++ public void displayChanged(GLAutoDrawable drawable,\r
++ boolean modeChanged,\r
++ boolean deviceChanged) {}\r
++\r
++ public static void main(String[] args) {\r
++ new JavaSimpleLite();\r
++ }\r
++}\r
++\r
+Index: D:/project.files/java.Lab/NyARToolKit/sample/jmf/JmfCaptureTest.java\r
+===================================================================\r
+--- D:/project.files/java.Lab/NyARToolKit/sample/jmf/JmfCaptureTest.java (revision 174)\r
++++ D:/project.files/java.Lab/NyARToolKit/sample/jmf/JmfCaptureTest.java (revision 178)\r
+@@ -1,56 +0,0 @@\r
+-/**\r
+- * VFM\83L\83\83\83v\83`\83\83\83e\83X\83g\83v\83\8d\83O\83\89\83\80\r
+- * (c)2008 R.iizuka\r
+- * airmail@ebony.plala.or.jp\r
+- * http://nyatla.jp/\r
+- */\r
+-import javax.media.*;\r
+-\r
+-import javax.media.util.BufferToImage;\r
+-import javax.media.format.*;\r
+-\r
+-import jp.nyatla.nyartoolkit.NyARException;\r
+-import jp.nyatla.nyartoolkit.jmf.*;\r
+-import java.awt.*;\r
+-\r
+-\r
+-\r
+-public class JmfCaptureTest extends Frame implements JmfCaptureListener{\r
+- public JmfCaptureTest() throws NyARException\r
+- {\r
+- setTitle("JmfCaptureTest");\r
+- setBounds(0,0,320+64,240+64); \r
+- capture=new JmfCameraCapture(320,240,30f,JmfCameraCapture.PIXEL_FORMAT_RGB);\r
+- capture.setCaptureListener(this);\r
+- }\r
+-\r
+-\r
+-\r
+- private JmfCameraCapture capture;\r
+- public void onUpdateBuffer(Buffer i_buffer)\r
+- {\r
+- BufferToImage b2i=new BufferToImage((VideoFormat)i_buffer.getFormat());\r
+- Image img=b2i.createImage(i_buffer);\r
+- Graphics g = getGraphics(); \r
+- g.drawImage(img, 32, 32,this); \r
+- }\r
+- private void startCapture()\r
+- {\r
+- try{\r
+- capture.start();\r
+- }catch(Exception e){\r
+- e.printStackTrace();\r
+- }\r
+- }\r
+- public static void main(String[] args) {\r
+- try{\r
+- JmfCaptureTest mainwin = new JmfCaptureTest();\r
+- mainwin.setVisible(true);\r
+- mainwin.startCapture();\r
+- }catch(Exception e){\r
+- e.printStackTrace();\r
+- }\r
+- \r
+- }\r
+-\r
+-}\r
+Index: D:/project.files/java.Lab/NyARToolKit/sample/jmf/NyarToolkitLinkTest.java\r
+===================================================================\r
+--- D:/project.files/java.Lab/NyARToolKit/sample/jmf/NyarToolkitLinkTest.java (revision 174)\r
++++ D:/project.files/java.Lab/NyARToolKit/sample/jmf/NyarToolkitLinkTest.java (revision 178)\r
+@@ -1,114 +0,0 @@\r
+-/**\r
+- * VFM+ARToolkit\83e\83X\83g\83v\83\8d\83O\83\89\83\80\r
+- * \83J\83\81\83\89\82©\82ç\8eæ\82è\8d\9e\82ñ\82¾\83f\81[\83^\82©\82ç\83}\81[\83J\81[\82ð\8c\9f\8fo\82µ\82Ä\81A\88ê\92v\93x\82Æ\95Ï\8a·\8ds\97ñ\82ð\95\\8e¦\82µ\82Ü\82·\81B\r
+- * (c)2008 R.iizuka\r
+- * airmail(at)ebony.plala.or.jp\r
+- * http://nyatla.jp/\r
+- */\r
+-import javax.media.*;\r
+-\r
+-import javax.media.util.BufferToImage;\r
+-import javax.media.format.*;\r
+-\r
+-import jp.nyatla.nyartoolkit.NyARException;\r
+-import jp.nyatla.nyartoolkit.jmf.*;\r
+-import jp.nyatla.nyartoolkit.jmfutil.*;\r
+-import java.awt.*;\r
+-\r
+-import jp.nyatla.nyartoolkit.core.*;\r
+-import jp.nyatla.nyartoolkit.detector.*;\r
+-import jp.nyatla.nyartoolkit.core.raster.*;\r
+-\r
+-\r
+-\r
+-\r
+-\r
+-public class NyarToolkitLinkTest extends Frame implements JmfCaptureListener\r
+-{\r
+- private final String CARCODE_FILE ="../../Data/patt.hiro";\r
+- private final String PARAM_FILE ="../../Data/camera_para.dat";\r
+- private JmfCameraCapture capture;\r
+- NyARSingleDetectMarker nya;\r
+- JmfNyARRaster_RGB raster;\r
+-\r
+- public NyarToolkitLinkTest() throws NyARException,NyARException\r
+- {\r
+- setTitle("JmfCaptureTest");\r
+- setBounds(0,0,320+64,240+64); \r
+- //\83L\83\83\83v\83`\83\83\82Ì\8f\80\94õ\r
+- capture=new JmfCameraCapture(320,240,30f,JmfCameraCapture.PIXEL_FORMAT_RGB);\r
+- capture.setCaptureListener(this);\r
+- \r
+- //NyARToolkit\82Ì\8f\80\94õ\r
+- NyARParam ar_param=new NyARParam();\r
+- NyARCode ar_code =new NyARCode(16,16);\r
+- ar_param.loadFromARFile(PARAM_FILE);\r
+- ar_param.changeSize(320,240);\r
+- nya=new NyARSingleDetectMarker(ar_param,ar_code,80.0);\r
+- ar_code.loadFromARFile(CARCODE_FILE);\r
+- //\83L\83\83\83v\83`\83\83\83C\83\81\81[\83W\97p\82Ì\83\89\83X\83^\82ð\8f\80\94õ\r
+- raster=new JmfNyARRaster_RGB(320,240);\r
+- }\r
+-\r
+-\r
+-\r
+- public void onUpdateBuffer(Buffer i_buffer)\r
+- {\r
+- try{\r
+- //\83L\83\83\83v\83`\83\83\82µ\82½\83o\83b\83t\83@\82ð\83\89\83X\83^\82É\83Z\83b\83g\r
+- raster.setBuffer(i_buffer);\r
+-\r
+- //\83L\83\83\83v\83`\83\83\82µ\82½\83C\83\81\81[\83W\82ð\95\\8e¦\97p\82É\89Á\8dH\r
+- BufferToImage b2i=new BufferToImage((VideoFormat)i_buffer.getFormat());\r
+- Image img=b2i.createImage(i_buffer);\r
+-\r
+- Graphics g = getGraphics(); \r
+- double[][] atm=null;\r
+-\r
+- //\83}\81[\83J\81[\8c\9f\8fo\r
+- boolean is_marker_exist=nya.detectMarkerLite(raster,100);\r
+- if(is_marker_exist){\r
+- //\95Ï\8a·\8ds\97ñ\82ð\8eæ\93¾\r
+- atm=nya.getTransmationMatrix().getArray();\r
+- }\r
+- //\8fî\95ñ\82ð\89æ\96Ê\82É\8f\91\82 \r
+- g.drawImage(img, 32, 32,this);\r
+- if(is_marker_exist){\r
+- g.drawString("\83}\81[\83J\81[\8c\9f\8fo:"+nya.getConfidence(),32,50);\r
+- for(int i=0;i<3;i++){\r
+- for(int i2=0;i2<4;i2++){\r
+- g.drawString("["+i+"]["+i2+"]"+atm[i][i2],32,50+(1+i2*3+i)*16);\r
+- }\r
+- \r
+- }\r
+- }else{\r
+- g.drawString("\83}\81[\83J\81[\96¢\8c\9f\8fo:",32,100);\r
+- }\r
+- }catch(Exception e){\r
+- e.printStackTrace();\r
+- }\r
+- \r
+- \r
+- \r
+- \r
+- }\r
+- private void startCapture()\r
+- {\r
+- try{\r
+- capture.start();\r
+- }catch(Exception e){\r
+- e.printStackTrace();\r
+- }\r
+- }\r
+- public static void main(String[] args) {\r
+- try{\r
+- NyarToolkitLinkTest mainwin = new NyarToolkitLinkTest();\r
+- mainwin.setVisible(true);\r
+- mainwin.startCapture();\r
+- }catch(Exception e){\r
+- e.printStackTrace();\r
+- }\r
+- \r
+- }\r
+-\r
+-}\r
+Index: D:/project.files/java.Lab/NyARToolKit/sample/jmf/jp/nyatla/nyartoolkit/jmf/MonitorCDS.java\r
+===================================================================\r
+--- D:/project.files/java.Lab/NyARToolKit/sample/jmf/jp/nyatla/nyartoolkit/jmf/MonitorCDS.java (revision 174)\r
++++ D:/project.files/java.Lab/NyARToolKit/sample/jmf/jp/nyatla/nyartoolkit/jmf/MonitorCDS.java (revision 178)\r
+@@ -1,136 +0,0 @@\r
+-/*\r
+- * Copyright (c) 1996-2001 Sun Microsystems, Inc. All Rights Reserved.\r
+- *\r
+- * Sun grants you ("Licensee") a non-exclusive, royalty free, license to use,\r
+- * modify and redistribute this software in source and binary code form,\r
+- * provided that i) this copyright notice and license appear on all copies of\r
+- * the software; and ii) Licensee does not utilize the software in a manner\r
+- * which is disparaging to Sun.\r
+- *\r
+- * This software is provided "AS IS," without a warranty of any kind. ALL\r
+- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING ANY\r
+- * IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR\r
+- * NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN AND ITS LICENSORS SHALL NOT BE\r
+- * LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING\r
+- * OR DISTRIBUTING THE SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR ITS\r
+- * LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT,\r
+- * INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER\r
+- * CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF\r
+- * OR INABILITY TO USE SOFTWARE, EVEN IF SUN HAS BEEN ADVISED OF THE\r
+- * POSSIBILITY OF SUCH DAMAGES.\r
+- *\r
+- * This software is not designed or intended for use in on-line control of\r
+- * aircraft, air traffic, aircraft navigation or aircraft communications; or in\r
+- * the design, construction, operation or maintenance of any nuclear\r
+- * facility. Licensee represents and warrants that it will not use or\r
+- * redistribute the Software for such purposes.\r
+- */\r
+-package jp.nyatla.nyartoolkit.jmf;\r
+-\r
+-\r
+-import javax.media.*;\r
+-import javax.media.protocol.*;\r
+-import javax.media.control.*;\r
+-\r
+-import java.io.IOException;\r
+-\r
+-\r
+-\r
+-public class MonitorCDS extends PushBufferDataSource{\r
+-\r
+- private PushBufferDataSource delegate = null;\r
+- private PushBufferStream [] delStreams = null;\r
+- private MonitorStream monitorStream = null;\r
+- private PushBufferStream [] monitorStreams = null;\r
+- boolean delStarted = false; // variable used by MonitorStream also\r
+- private Control [] controls;\r
+-\r
+- public MonitorCDS(DataSource ds)\r
+- {\r
+- // Get the stream from the actual datasource\r
+- // and create a MonitorStream from it\r
+- // Export the MonitorControl interface of the MonitorStream\r
+- if (ds instanceof PushBufferDataSource)\r
+- {\r
+- delegate = (PushBufferDataSource) ds;\r
+- delStreams = delegate.getStreams();\r
+- monitorStream = new MonitorStream(delStreams[0], this);\r
+- monitorStreams = new PushBufferStream[] {monitorStream};\r
+- }\r
+- }\r
+-\r
+- public Object [] getControls()\r
+- {\r
+- return controls;\r
+- }\r
+-\r
+- public Object getControl(String value) {\r
+- if (value.equals("jmfsample.MonitorStream") || value.equals("javax.media.control.MonitorControl"))\r
+- return monitorStream;\r
+- else\r
+- return null;\r
+- }\r
+-\r
+- public javax.media.CaptureDeviceInfo getCaptureDeviceInfo()\r
+- {\r
+- return ((CaptureDevice)delegate).getCaptureDeviceInfo();\r
+- }\r
+-\r
+- public FormatControl[] getFormatControls()\r
+- {\r
+- return ((CaptureDevice)delegate).getFormatControls();\r
+- }\r
+-\r
+- public String getContentType()\r
+- {\r
+- return delegate.getContentType();\r
+- }\r
+-\r
+- public void connect() throws IOException\r
+- {\r
+- if (delegate == null)\r
+- throw new IOException("Incompatible DataSource");\r
+- // Delegate is already connected\r
+- }\r
+-\r
+- public void disconnect()\r
+- {\r
+- monitorStream.setEnabled(false);\r
+- delegate.disconnect();\r
+- }\r
+-\r
+- public synchronized void start() throws IOException\r
+- {\r
+- startDelegate();\r
+- delStarted = true;\r
+- }\r
+-\r
+- public synchronized void stop() throws IOException\r
+- {\r
+- if (!monitorStream.isEnabled()) {\r
+- stopDelegate();\r
+- }\r
+- delStarted = false;\r
+- }\r
+-\r
+- public Time getDuration()\r
+- {\r
+- return delegate.getDuration();\r
+- }\r
+-\r
+- public PushBufferStream [] getStreams()\r
+- {\r
+- return monitorStreams;\r
+- }\r
+-\r
+- void startDelegate() throws IOException\r
+- {\r
+- delegate.start();\r
+- }\r
+-\r
+- void stopDelegate() throws IOException\r
+- {\r
+- delegate.stop();\r
+- }\r
+-\r
+-}\r
+Index: D:/project.files/java.Lab/NyARToolKit/sample/jmf/jp/nyatla/nyartoolkit/jmf/MonitorStream.java\r
+===================================================================\r
+--- D:/project.files/java.Lab/NyARToolKit/sample/jmf/jp/nyatla/nyartoolkit/jmf/MonitorStream.java (revision 174)\r
++++ D:/project.files/java.Lab/NyARToolKit/sample/jmf/jp/nyatla/nyartoolkit/jmf/MonitorStream.java (revision 178)\r
+@@ -1,196 +0,0 @@\r
+-/*\r
+- * Copyright (c) 1996-2001 Sun Microsystems, Inc. All Rights Reserved.\r
+- *\r
+- * Sun grants you ("Licensee") a non-exclusive, royalty free, license to use,\r
+- * modify and redistribute this software in source and binary code form,\r
+- * provided that i) this copyright notice and license appear on all copies of\r
+- * the software; and ii) Licensee does not utilize the software in a manner\r
+- * which is disparaging to Sun.\r
+- *\r
+- * This software is provided "AS IS," without a warranty of any kind. ALL\r
+- * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING ANY\r
+- * IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR\r
+- * NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN AND ITS LICENSORS SHALL NOT BE\r
+- * LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING\r
+- * OR DISTRIBUTING THE SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR ITS\r
+- * LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT,\r
+- * INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER\r
+- * CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF\r
+- * OR INABILITY TO USE SOFTWARE, EVEN IF SUN HAS BEEN ADVISED OF THE\r
+- * POSSIBILITY OF SUCH DAMAGES.\r
+- *\r
+- * This software is not designed or intended for use in on-line control of\r
+- * aircraft, air traffic, aircraft navigation or aircraft communications; or in\r
+- * the design, construction, operation or maintenance of any nuclear\r
+- * facility. Licensee represents and warrants that it will not use or\r
+- * redistribute the Software for such purposes.\r
+- */\r
+-package jp.nyatla.nyartoolkit.jmf;\r
+-\r
+-\r
+-\r
+-import javax.media.*;\r
+-import javax.media.protocol.*;\r
+-\r
+-import javax.media.util.BufferToImage;\r
+-import java.io.IOException;\r
+-import java.awt.*;\r
+-\r
+-public class MonitorStream implements PushBufferStream, BufferTransferHandler {\r
+-\r
+- JmfCaptureListener img_listener;\r
+- PushBufferStream actual = null;\r
+- boolean dataAvailable = false;\r
+- boolean terminate = false;\r
+- boolean enabled = false;\r
+- Object bufferLock = new Object();\r
+- Buffer cbuffer = new Buffer();\r
+- BufferTransferHandler transferHandler = null;\r
+- Component component = null;\r
+- MonitorCDS cds;\r
+- BufferToImage bti = null;\r
+- \r
+- MonitorStream(PushBufferStream actual, MonitorCDS cds) {\r
+- this.actual = actual;\r
+- actual.setTransferHandler(this);\r
+- this.cds = cds;\r
+- }\r
+-\r
+- public javax.media.Format getFormat()\r
+- {\r
+- return actual.getFormat();\r
+- }\r
+- /**\r
+- * \94ñ\93¯\8aúREAD\r
+- */\r
+- public void read(Buffer buffer) throws IOException\r
+- {\r
+- // Wait for data to be available\r
+- // Doesn't get used much because the transferData\r
+- // call is made when data IS available. And most\r
+- // Processors/Players read the data in the same\r
+- // thread that called transferData, although that's\r
+- // not a safe assumption to make\r
+- if (!dataAvailable) {\r
+- synchronized (bufferLock) {\r
+- while (!dataAvailable && !terminate) {\r
+- try {\r
+- bufferLock.wait(100);\r
+- } catch (InterruptedException ie) {\r
+- }\r
+- }\r
+- }\r
+- }\r
+-\r
+- if (dataAvailable) {\r
+- synchronized (bufferLock) {\r
+- // Copy the buffer attributes, but swap the data\r
+- // attributes so that no extra copy is made.\r
+- buffer.copy(cbuffer, true);\r
+- //dataAvailable = false;\r
+- }\r
+- }\r
+-// return;\r
+- }\r
+- public void setCaptureListener(JmfCaptureListener i_listener)\r
+- {\r
+- img_listener=i_listener;\r
+- }\r
+-\r
+- public void transferData(PushBufferStream pbs)\r
+- {\r
+- // Get the data from the original source stream\r
+- synchronized (bufferLock) {\r
+- try {\r
+- pbs.read(cbuffer);\r
+- } catch (IOException ioe) {\r
+- return;\r
+- }\r
+- dataAvailable = true;\r
+- bufferLock.notifyAll();\r
+- }\r
+- if(img_listener!=null){\r
+- img_listener.onUpdateBuffer(cbuffer);\r
+- }\r
+- \r
+-/*\r
+- // Display data if monitor is active\r
+- if (isEnabled()) {\r
+- if (bti == null) {\r
+- VideoFormat vf = (VideoFormat) cbuffer.getFormat();\r
+- bti = new BufferToImage(vf);\r
+- }\r
+- if (bti != null && component != null) {\r
+- Image im = bti.createImage(cbuffer);\r
+- Graphics g = component.getGraphics();\r
+- Dimension size = component.getSize();\r
+- if (g != null)\r
+- g.drawImage(im, 0, 0, component);\r
+- }\r
+- }\r
+-*/\r
+- // Maybe synchronize this with setTransferHandler() ?\r
+- if (transferHandler != null && cds.delStarted)\r
+- transferHandler.transferData(this);\r
+- }\r
+-\r
+- public void setTransferHandler(BufferTransferHandler transferHandler) {\r
+- this.transferHandler = transferHandler;\r
+- }\r
+-\r
+- public boolean setEnabled(boolean value) {\r
+- enabled = value;\r
+- if (value == false) {\r
+- if (!cds.delStarted) {\r
+- try {\r
+- cds.stopDelegate();\r
+- } catch (IOException ioe) {\r
+- }\r
+- }\r
+- } else {\r
+- // Start the capture datasource if the monitor is enabled\r
+- try {\r
+- cds.startDelegate();\r
+- }catch (IOException ioe) {\r
+- }\r
+- }\r
+- return enabled;\r
+- }\r
+-\r
+- public boolean isEnabled()\r
+- {\r
+- return enabled;\r
+- }\r
+-\r
+-\r
+-\r
+- public float setPreviewFrameRate(float rate)\r
+- {\r
+- System.err.println("TODO");\r
+- return rate;\r
+- }\r
+- \r
+- public ContentDescriptor getContentDescriptor()\r
+- {\r
+- return actual.getContentDescriptor();\r
+- }\r
+-\r
+- public long getContentLength()\r
+- {\r
+- return actual.getContentLength();\r
+- }\r
+-\r
+- public boolean endOfStream() {\r
+- return actual.endOfStream();\r
+- }\r
+-\r
+- public Object [] getControls() {\r
+- return new Object[0];\r
+- }\r
+-\r
+- public Object getControl(String str) {\r
+- return null;\r
+- }\r
+-\r
+-\r
+-}\r
+Index: D:/project.files/java.Lab/NyARToolKit/sample/jmf/jp/nyatla/nyartoolkit/jmf/JmfCaptureListener.java\r
+===================================================================\r
+--- D:/project.files/java.Lab/NyARToolKit/sample/jmf/jp/nyatla/nyartoolkit/jmf/JmfCaptureListener.java (revision 174)\r
++++ D:/project.files/java.Lab/NyARToolKit/sample/jmf/jp/nyatla/nyartoolkit/jmf/JmfCaptureListener.java (revision 178)\r
+@@ -1,14 +0,0 @@\r
+-/**\r
+- * JMF\82¨\8eè\8cy\83L\83\83\83v\83`\83\83\97p\83\8a\83X\83i\r
+- * (c)2008 R.Iizuka\r
+- * airmail@ebony.plala.or.jp\r
+- * http://nyatla.jp/\r
+- */\r
+-package jp.nyatla.nyartoolkit.jmf;\r
+-\r
+-import javax.media.Buffer;\r
+-\r
+-public interface JmfCaptureListener{\r
+- public void onUpdateBuffer(Buffer i_buffer);\r
+- \r
+-}\r
+\ No newline at end of file\r
+Index: D:/project.files/java.Lab/NyARToolKit/sample/jmf/jp/nyatla/nyartoolkit/jmf/JmfCameraCapture.java\r
+===================================================================\r
+--- D:/project.files/java.Lab/NyARToolKit/sample/jmf/jp/nyatla/nyartoolkit/jmf/JmfCameraCapture.java (revision 174)\r
++++ D:/project.files/java.Lab/NyARToolKit/sample/jmf/jp/nyatla/nyartoolkit/jmf/JmfCameraCapture.java (revision 178)\r
+@@ -1,180 +0,0 @@\r
+-/**\r
+- * JMF\82¨\8eè\8cy\83L\83\83\83v\83`\83\83\83N\83\89\83X\r
+- * (c)2008 R.Iizuka\r
+- * airmail@ebony.plala.or.jp\r
+- * http://nyatla.jp/\r
+- */\r
+-package jp.nyatla.nyartoolkit.jmf;\r
+-\r
+-\r
+-\r
+-import javax.media.*;\r
+-import javax.media.protocol.*;\r
+-import javax.media.control.*;\r
+-import javax.media.format.*;\r
+-import java.awt.*;\r
+-import java.util.*;\r
+-import javax.media.protocol.DataSource;\r
+-\r
+-import jp.nyatla.nyartoolkit.NyARException;\r
+-\r
+-\r
+-\r
+-\r
+-\r
+-public class JmfCameraCapture\r
+-{\r
+- private Dimension image_size;\r
+- private JmfCaptureListener capture_listener;\r
+- private DataSource jmf_data_source;\r
+- private MonitorStream jmf_monitor_stream;\r
+- private Processor jmf_processor;\r
+- private VideoFormat jmf_video_format;\r
+- \r
+- private Buffer read_buf=new Buffer();\r
+- public static final String PIXEL_FORMAT_RGB="RGB";\r
+- public JmfCameraCapture(int i_width,int i_height,float i_rate,String i_pixcel_format)\r
+- {\r
+- String encoding = i_pixcel_format;//comboEncoding.getSelectedItem();\r
+- image_size = new Dimension(i_width,i_height);\r
+- jmf_video_format = new VideoFormat(encoding, image_size, Format.NOT_SPECIFIED,null,i_rate);\r
+- }\r
+- public Dimension getSize()\r
+- {\r
+- return image_size;\r
+- }\r
+- public javax.media.Buffer readBuffer() throws NyARException\r
+- {\r
+- if(jmf_monitor_stream==null){\r
+- throw new NyARException();\r
+- }\r
+- try{\r
+- jmf_monitor_stream.read(read_buf);\r
+- }catch(Exception e){\r
+- throw new NyARException(e);\r
+- }\r
+- return read_buf;\r
+- }\r
+- public void setCaptureListener(JmfCaptureListener i_listener) throws NyARException\r
+- {\r
+- if(jmf_processor!=null){\r
+- throw new NyARException();\r
+- }\r
+- capture_listener=i_listener;\r
+- \r
+- }\r
+- public void start() throws NyARException\r
+- {\r
+- \r
+- DataSource ds=getCaptureDS(jmf_video_format);\r
+- VideoFormat[] formats=new VideoFormat[]{new VideoFormat(null)};\r
+- ProcessorModel pm = new ProcessorModel(ds,formats,null);//, formats, ftd);\r
+- Processor processor;\r
+- try {\r
+- processor = Manager.createRealizedProcessor(pm);\r
+- } catch (Exception e){\r
+- // Make sure the capture devices are released\r
+- ds.disconnect();\r
+- throw new NyARException(e);\r
+- }\r
+- // Get the monitor control:\r
+- // Since there are more than one MonitorControl objects\r
+- // exported by the DataSource, we get the specific one\r
+- // that is also the MonitorStream object.\r
+- jmf_monitor_stream=(MonitorStream)ds.getControl("jmfsample.MonitorStream");\r
+- jmf_monitor_stream.setCaptureListener(capture_listener);\r
+- jmf_data_source=ds;\r
+- jmf_processor=processor;\r
+- jmf_processor.start();\r
+- }\r
+- public void stop()\r
+- {\r
+- jmf_processor.stop();\r
+- jmf_processor.close();\r
+- jmf_processor = null;\r
+- \r
+- }\r
+- protected void finalize()\r
+- {\r
+- if(jmf_processor!=null){\r
+- jmf_processor.stop();\r
+- jmf_processor.close();\r
+- jmf_processor = null;\r
+- }\r
+- }\r
+- private static DataSource getCaptureDS(VideoFormat vf) {\r
+- DataSource dsVideo = null;\r
+- DataSource ds = null;\r
+-\r
+- // Create a capture DataSource for the video\r
+- // If there is no video capture device, then exit with null\r
+- if (vf != null) {\r
+- dsVideo = createDataSource(vf);\r
+- if (dsVideo == null)\r
+- return null;\r
+- }\r
+-\r
+-\r
+- // Create the monitoring datasource wrapper\r
+- if (dsVideo != null) {\r
+- dsVideo = new MonitorCDS(dsVideo);\r
+- return dsVideo;\r
+- }\r
+-\r
+- // Merge the data sources, if both audio and video are available\r
+- try {\r
+- ds = Manager.createMergingDataSource(new DataSource[]{dsVideo});\r
+- } catch (IncompatibleSourceException ise){\r
+- return null;\r
+- }\r
+-\r
+- return ds;\r
+- }\r
+-\r
+- private static DataSource createDataSource(Format format) {\r
+- DataSource ds;\r
+- Vector devices;\r
+- CaptureDeviceInfo cdi;\r
+- MediaLocator ml;\r
+-\r
+- // Find devices for format\r
+- devices = CaptureDeviceManager.getDeviceList(format);\r
+- if (devices.size() < 1) {\r
+- System.err.println("! No Devices for " + format);\r
+- return null;\r
+- }\r
+- // Pick the first device\r
+- cdi = (CaptureDeviceInfo) devices.elementAt(0);\r
+-\r
+- ml = cdi.getLocator();\r
+-\r
+- try {\r
+- ds = Manager.createDataSource(ml);\r
+- ds.connect();\r
+- if (ds instanceof CaptureDevice)\r
+- {\r
+- setCaptureFormat((CaptureDevice) ds, format);\r
+- }\r
+- } catch (Exception e) {\r
+- System.err.println(e);\r
+- return null;\r
+- }\r
+- return ds;\r
+- }\r
+-\r
+- private static void setCaptureFormat(CaptureDevice cdev, Format format) {\r
+- FormatControl [] fcs = cdev.getFormatControls();\r
+- if (fcs.length < 1){\r
+- return;\r
+- }\r
+- FormatControl fc = fcs[0];\r
+- Format [] formats = fc.getSupportedFormats();\r
+- for (int i = 0; i < formats.length; i++) {\r
+- if (formats[i].matches(format)){\r
+- format = formats[i].intersects(format);\r
+- fc.setFormat(format);\r
+- break;\r
+- }\r
+- }\r
+- }\r
+-}\r
+\ No newline at end of file\r
+Index: D:/project.files/java.Lab/NyARToolKit/sample/jmf/jp/nyatla/nyartoolkit/jmf/utils/JmfNyARRaster_RGB.java\r
+===================================================================\r
+--- D:/project.files/java.Lab/NyARToolKit/sample/jmf/jp/nyatla/nyartoolkit/jmf/utils/JmfNyARRaster_RGB.java (revision 0)\r
++++ D:/project.files/java.Lab/NyARToolKit/sample/jmf/jp/nyatla/nyartoolkit/jmf/utils/JmfNyARRaster_RGB.java (revision 178)\r
+@@ -0,0 +1,119 @@\r
++/**\r
++ * RGB\8c`\8e®\82ÌJMF\83o\83b\83t\83@\82ð\83\89\83b\83v\82·\82éNyARRaster\82Å\82·\81B\r
++ * JMF\82©\82ç\93¾\82½\83\89\83X\83^\83f\81[\83^\82Ì\83s\83N\83Z\83\8b\95À\82Ñ\8f\87\82ð\8dl\97¶\82µ\82Ü\82·\81B\r
++ * (c)2008 A\8cÕ\81\97nyatla.jp\r
++ * airmail(at)ebony.plala.or.jp\r
++ * http://nyatla.jp/\r
++ */\r
++package jp.nyatla.nyartoolkit.jmf.utils;\r
++\r
++\r
++import javax.media.format.RGBFormat;\r
++import java.awt.Dimension;\r
++import jp.nyatla.nyartoolkit.NyARException;\r
++import jp.nyatla.nyartoolkit.core.raster.NyARRaster;\r
++\r
++\r
++public class JmfNyARRaster_RGB implements NyARRaster\r
++{\r
++ public final static int PIXEL_ORDER_RGB=1;\r
++ public final static int PIXEL_ORDER_BGR=2;\r
++ protected int pix_type;\r
++ private int red_idx;\r
++ private int green_idx;\r
++ private int blue_idx;\r
++ protected byte[] ref_buf;\r
++ protected int width=0;\r
++ protected int height=0;\r
++\r
++ /**\r
++ * RGB\8c`\8e®\82ÌJMF\83o\83b\83t\83@\82ð\83\89\83b\83v\82·\82é\83I\83u\83W\83F\83N\83g\82ð\82Â\82\82è\82Ü\82·\81B\r
++ * \90¶\90¬\92¼\8cã\82Ì\83I\83u\83W\83F\83N\83g\82Í\83f\81[\83^\82ð\8e\9d\82¿\82Ü\82¹\82ñ\81B\r
++ * \83\81\83\93\83o\8aÖ\90\94\82ÍsetBuffer\82ð\8eÀ\8ds\8cã\82É\8eg\97p\89Â\94\\82É\82È\82è\82Ü\82·\81B\r
++ */\r
++ public JmfNyARRaster_RGB(int i_width,int i_height)\r
++ {\r
++ ref_buf=null;\r
++ width=i_width;\r
++ height=i_height;\r
++ }\r
++ /**\r
++ * \83t\83H\81[\83}\83b\83g\82ð\89ð\90Í\82µ\82Ä\81A\83C\83\93\83X\83^\83\93\83X\82Ì\83t\83H\81[\83}\83b\83g\83v\83\8d\83p\83e\83B\82ð\8f\89\8aú\89»\82µ\82Ü\82·\81B\r
++ * \r
++ * @param i_buffer\r
++ * @throws NyARException\r
++ */\r
++ protected void initFormatProperty(RGBFormat i_fmt) throws NyARException\r
++ {\r
++ //\83f\81[\83^\83T\83C\83Y\82Ì\8am\94F\r
++ Dimension s=i_fmt.getSize();\r
++ if(width!=s.width || height !=s.height){\r
++ throw new NyARException();\r
++ }\r
++ //\83f\81[\83^\94z\97ñ\82Ì\8am\94F\r
++ red_idx =i_fmt.getRedMask()-1;\r
++ green_idx=i_fmt.getGreenMask()-1;\r
++ blue_idx =i_fmt.getBlueMask()-1;\r
++ \r
++ //\90F\94z\97ñ\82Ì\93Á\92è\r
++ if(red_idx==0 && blue_idx==2){\r
++ pix_type=PIXEL_ORDER_RGB;\r
++ }else if(red_idx==2 && blue_idx==0){\r
++ pix_type=PIXEL_ORDER_BGR;\r
++ }else{\r
++ throw new NyARException("Unknown pixel order.");\r
++ } \r
++ }\r
++ /**\r
++ * javax.media.Buffer\82ð\95ª\90Í\82µ\82Ä\81A\82»\82Ì\95ª\90Í\8c\8b\89Ê\82ðNyARRaster\82É\93K\8d\87\82·\82é\8c`\82Å\95Û\8e\9d\82µ\82Ü\82·\81B\r
++ * \8aÖ\90\94\8eÀ\8ds\8cã\82É\8aO\95\94\82Åi_buffer\82Ì\93à\97e\95Ï\8dX\82µ\82½\8fê\8d\87\82É\82Í\81A\8dÄ\93xsetBuffer\8aÖ\90\94\82ð\8cÄ\82Ñ\8fo\82µ\82Ä\82\82¾\82³\82¢\81B\r
++ * @param i_buffer\r
++ * RGB\8c`\8e®\82Ì\83f\81[\83^\82ð\8ai\94[\82µ\82½javax.media.Buffer\83I\83u\83W\83F\83N\83g\82ð\8ew\92è\82µ\82Ä\82\82¾\82³\82¢\81B\r
++ * @return\r
++ * i_buffer\82ð\83\89\83b\83v\82µ\82½\83I\83u\83W\83F\83N\83g\82ð\95Ô\82µ\82Ü\82·\81B\r
++ * @throws NyARException\r
++ */\r
++ public void setBuffer(javax.media.Buffer i_buffer) throws NyARException\r
++ {\r
++ initFormatProperty((RGBFormat)i_buffer.getFormat());\r
++ ref_buf=(byte[])i_buffer.getData();\r
++ }\r
++ public int getPixelTotal(int i_x,int i_y)\r
++ {\r
++ int bp=(i_x+i_y*width)*3;\r
++ return (ref_buf[bp] & 0xff)+(ref_buf[bp+1] & 0xff)+(ref_buf[bp+2] & 0xff);\r
++ }\r
++ public int getWidth()\r
++ {\r
++ return width;\r
++ }\r
++ public int getHeight()\r
++ {\r
++ return height;\r
++ }\r
++ public void pickRgbArray(int i_x,int i_y,int[] i_rgb)\r
++ {\r
++ int bp=(i_x+i_y*width)*3;\r
++ i_rgb[0]=(ref_buf[bp+red_idx] & 0xff);//R\r
++ i_rgb[1]=(ref_buf[bp+green_idx] & 0xff);//G\r
++ i_rgb[2]=(ref_buf[bp+blue_idx] & 0xff);//B\r
++ }\r
++ /**\r
++ * \83s\83N\83Z\83\8b\82Ì\8f\87\8f\98\83^\83C\83v\82ð\95Ô\82µ\82Ü\82·\81B\r
++ * @return\r
++ * \82»\82Ì\92l\r
++ */\r
++ public int getPixelOrder()\r
++ {\r
++ return pix_type;\r
++ }\r
++ /**\r
++ * \83f\81[\83^\82ð\8e\9d\82Á\82Ä\82¢\82é\82©\82ð\95Ô\82µ\82Ü\82·\81B\r
++ * @return\r
++ */\r
++ public boolean hasData()\r
++ {\r
++ return ref_buf!=null;\r
++ }\r
++\r
++}\r
+Index: D:/project.files/java.Lab/NyARToolKit/sample/jmf/jp/nyatla/nyartoolkit/jmf/utils/MonitorCDS.java\r
+===================================================================\r
+--- D:/project.files/java.Lab/NyARToolKit/sample/jmf/jp/nyatla/nyartoolkit/jmf/utils/MonitorCDS.java (revision 0)\r
++++ D:/project.files/java.Lab/NyARToolKit/sample/jmf/jp/nyatla/nyartoolkit/jmf/utils/MonitorCDS.java (revision 178)\r
+@@ -0,0 +1,136 @@\r
++/*\r
++ * Copyright (c) 1996-2001 Sun Microsystems, Inc. All Rights Reserved.\r
++ *\r
++ * Sun grants you ("Licensee") a non-exclusive, royalty free, license to use,\r
++ * modify and redistribute this software in source and binary code form,\r
++ * provided that i) this copyright notice and license appear on all copies of\r
++ * the software; and ii) Licensee does not utilize the software in a manner\r
++ * which is disparaging to Sun.\r
++ *\r
++ * This software is provided "AS IS," without a warranty of any kind. ALL\r
++ * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING ANY\r
++ * IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR\r
++ * NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN AND ITS LICENSORS SHALL NOT BE\r
++ * LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING\r
++ * OR DISTRIBUTING THE SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR ITS\r
++ * LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT,\r
++ * INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER\r
++ * CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF\r
++ * OR INABILITY TO USE SOFTWARE, EVEN IF SUN HAS BEEN ADVISED OF THE\r
++ * POSSIBILITY OF SUCH DAMAGES.\r
++ *\r
++ * This software is not designed or intended for use in on-line control of\r
++ * aircraft, air traffic, aircraft navigation or aircraft communications; or in\r
++ * the design, construction, operation or maintenance of any nuclear\r
++ * facility. Licensee represents and warrants that it will not use or\r
++ * redistribute the Software for such purposes.\r
++ */\r
++package jp.nyatla.nyartoolkit.jmf.utils;\r
++\r
++\r
++import javax.media.*;\r
++import javax.media.protocol.*;\r
++import javax.media.control.*;\r
++\r
++import java.io.IOException;\r
++\r
++\r
++\r
++public class MonitorCDS extends PushBufferDataSource{\r
++\r
++ private PushBufferDataSource delegate = null;\r
++ private PushBufferStream [] delStreams = null;\r
++ private MonitorStream monitorStream = null;\r
++ private PushBufferStream [] monitorStreams = null;\r
++ boolean delStarted = false; // variable used by MonitorStream also\r
++ private Control [] controls;\r
++\r
++ public MonitorCDS(DataSource ds)\r
++ {\r
++ // Get the stream from the actual datasource\r
++ // and create a MonitorStream from it\r
++ // Export the MonitorControl interface of the MonitorStream\r
++ if (ds instanceof PushBufferDataSource)\r
++ {\r
++ delegate = (PushBufferDataSource) ds;\r
++ delStreams = delegate.getStreams();\r
++ monitorStream = new MonitorStream(delStreams[0], this);\r
++ monitorStreams = new PushBufferStream[] {monitorStream};\r
++ }\r
++ }\r
++\r
++ public Object [] getControls()\r
++ {\r
++ return controls;\r
++ }\r
++\r
++ public Object getControl(String value) {\r
++ if (value.equals("jmfsample.MonitorStream") || value.equals("javax.media.control.MonitorControl"))\r
++ return monitorStream;\r
++ else\r
++ return null;\r
++ }\r
++\r
++ public javax.media.CaptureDeviceInfo getCaptureDeviceInfo()\r
++ {\r
++ return ((CaptureDevice)delegate).getCaptureDeviceInfo();\r
++ }\r
++\r
++ public FormatControl[] getFormatControls()\r
++ {\r
++ return ((CaptureDevice)delegate).getFormatControls();\r
++ }\r
++\r
++ public String getContentType()\r
++ {\r
++ return delegate.getContentType();\r
++ }\r
++\r
++ public void connect() throws IOException\r
++ {\r
++ if (delegate == null)\r
++ throw new IOException("Incompatible DataSource");\r
++ // Delegate is already connected\r
++ }\r
++\r
++ public void disconnect()\r
++ {\r
++ monitorStream.setEnabled(false);\r
++ delegate.disconnect();\r
++ }\r
++\r
++ public synchronized void start() throws IOException\r
++ {\r
++ startDelegate();\r
++ delStarted = true;\r
++ }\r
++\r
++ public synchronized void stop() throws IOException\r
++ {\r
++ if (!monitorStream.isEnabled()) {\r
++ stopDelegate();\r
++ }\r
++ delStarted = false;\r
++ }\r
++\r
++ public Time getDuration()\r
++ {\r
++ return delegate.getDuration();\r
++ }\r
++\r
++ public PushBufferStream [] getStreams()\r
++ {\r
++ return monitorStreams;\r
++ }\r
++\r
++ void startDelegate() throws IOException\r
++ {\r
++ delegate.start();\r
++ }\r
++\r
++ void stopDelegate() throws IOException\r
++ {\r
++ delegate.stop();\r
++ }\r
++\r
++}\r
+Index: D:/project.files/java.Lab/NyARToolKit/sample/jmf/jp/nyatla/nyartoolkit/jmf/utils/MonitorStream.java\r
+===================================================================\r
+--- D:/project.files/java.Lab/NyARToolKit/sample/jmf/jp/nyatla/nyartoolkit/jmf/utils/MonitorStream.java (revision 0)\r
++++ D:/project.files/java.Lab/NyARToolKit/sample/jmf/jp/nyatla/nyartoolkit/jmf/utils/MonitorStream.java (revision 178)\r
+@@ -0,0 +1,196 @@\r
++/*\r
++ * Copyright (c) 1996-2001 Sun Microsystems, Inc. All Rights Reserved.\r
++ *\r
++ * Sun grants you ("Licensee") a non-exclusive, royalty free, license to use,\r
++ * modify and redistribute this software in source and binary code form,\r
++ * provided that i) this copyright notice and license appear on all copies of\r
++ * the software; and ii) Licensee does not utilize the software in a manner\r
++ * which is disparaging to Sun.\r
++ *\r
++ * This software is provided "AS IS," without a warranty of any kind. ALL\r
++ * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING ANY\r
++ * IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR\r
++ * NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN AND ITS LICENSORS SHALL NOT BE\r
++ * LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING\r
++ * OR DISTRIBUTING THE SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR ITS\r
++ * LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT,\r
++ * INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER\r
++ * CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF\r
++ * OR INABILITY TO USE SOFTWARE, EVEN IF SUN HAS BEEN ADVISED OF THE\r
++ * POSSIBILITY OF SUCH DAMAGES.\r
++ *\r
++ * This software is not designed or intended for use in on-line control of\r
++ * aircraft, air traffic, aircraft navigation or aircraft communications; or in\r
++ * the design, construction, operation or maintenance of any nuclear\r
++ * facility. Licensee represents and warrants that it will not use or\r
++ * redistribute the Software for such purposes.\r
++ */\r
++package jp.nyatla.nyartoolkit.jmf.utils;\r
++\r
++\r
++\r
++import javax.media.*;\r
++import javax.media.protocol.*;\r
++\r
++import javax.media.util.BufferToImage;\r
++import java.io.IOException;\r
++import java.awt.*;\r
++\r
++public class MonitorStream implements PushBufferStream, BufferTransferHandler {\r
++\r
++ JmfCaptureListener img_listener;\r
++ PushBufferStream actual = null;\r
++ boolean dataAvailable = false;\r
++ boolean terminate = false;\r
++ boolean enabled = false;\r
++ Object bufferLock = new Object();\r
++ Buffer cbuffer = new Buffer();\r
++ BufferTransferHandler transferHandler = null;\r
++ Component component = null;\r
++ MonitorCDS cds;\r
++ BufferToImage bti = null;\r
++ \r
++ MonitorStream(PushBufferStream actual, MonitorCDS cds) {\r
++ this.actual = actual;\r
++ actual.setTransferHandler(this);\r
++ this.cds = cds;\r
++ }\r
++\r
++ public javax.media.Format getFormat()\r
++ {\r
++ return actual.getFormat();\r
++ }\r
++ /**\r
++ * \94ñ\93¯\8aúREAD\r
++ */\r
++ public void read(Buffer buffer) throws IOException\r
++ {\r
++ // Wait for data to be available\r
++ // Doesn't get used much because the transferData\r
++ // call is made when data IS available. And most\r
++ // Processors/Players read the data in the same\r
++ // thread that called transferData, although that's\r
++ // not a safe assumption to make\r
++ if (!dataAvailable) {\r
++ synchronized (bufferLock) {\r
++ while (!dataAvailable && !terminate) {\r
++ try {\r
++ bufferLock.wait(100);\r
++ } catch (InterruptedException ie) {\r
++ }\r
++ }\r
++ }\r
++ }\r
++\r
++ if (dataAvailable) {\r
++ synchronized (bufferLock) {\r
++ // Copy the buffer attributes, but swap the data\r
++ // attributes so that no extra copy is made.\r
++ buffer.copy(cbuffer, true);\r
++ //dataAvailable = false;\r
++ }\r
++ }\r
++// return;\r
++ }\r
++ public void setCaptureListener(JmfCaptureListener i_listener)\r
++ {\r
++ img_listener=i_listener;\r
++ }\r
++\r
++ public void transferData(PushBufferStream pbs)\r
++ {\r
++ // Get the data from the original source stream\r
++ synchronized (bufferLock) {\r
++ try {\r
++ pbs.read(cbuffer);\r
++ } catch (IOException ioe) {\r
++ return;\r
++ }\r
++ dataAvailable = true;\r
++ bufferLock.notifyAll();\r
++ }\r
++ if(img_listener!=null){\r
++ img_listener.onUpdateBuffer(cbuffer);\r
++ }\r
++ \r
++/*\r
++ // Display data if monitor is active\r
++ if (isEnabled()) {\r
++ if (bti == null) {\r
++ VideoFormat vf = (VideoFormat) cbuffer.getFormat();\r
++ bti = new BufferToImage(vf);\r
++ }\r
++ if (bti != null && component != null) {\r
++ Image im = bti.createImage(cbuffer);\r
++ Graphics g = component.getGraphics();\r
++ Dimension size = component.getSize();\r
++ if (g != null)\r
++ g.drawImage(im, 0, 0, component);\r
++ }\r
++ }\r
++*/\r
++ // Maybe synchronize this with setTransferHandler() ?\r
++ if (transferHandler != null && cds.delStarted)\r
++ transferHandler.transferData(this);\r
++ }\r
++\r
++ public void setTransferHandler(BufferTransferHandler transferHandler) {\r
++ this.transferHandler = transferHandler;\r
++ }\r
++\r
++ public boolean setEnabled(boolean value) {\r
++ enabled = value;\r
++ if (value == false) {\r
++ if (!cds.delStarted) {\r
++ try {\r
++ cds.stopDelegate();\r
++ } catch (IOException ioe) {\r
++ }\r
++ }\r
++ } else {\r
++ // Start the capture datasource if the monitor is enabled\r
++ try {\r
++ cds.startDelegate();\r
++ }catch (IOException ioe) {\r
++ }\r
++ }\r
++ return enabled;\r
++ }\r
++\r
++ public boolean isEnabled()\r
++ {\r
++ return enabled;\r
++ }\r
++\r
++\r
++\r
++ public float setPreviewFrameRate(float rate)\r
++ {\r
++ System.err.println("TODO");\r
++ return rate;\r
++ }\r
++ \r
++ public ContentDescriptor getContentDescriptor()\r
++ {\r
++ return actual.getContentDescriptor();\r
++ }\r
++\r
++ public long getContentLength()\r
++ {\r
++ return actual.getContentLength();\r
++ }\r
++\r
++ public boolean endOfStream() {\r
++ return actual.endOfStream();\r
++ }\r
++\r
++ public Object [] getControls() {\r
++ return new Object[0];\r
++ }\r
++\r
++ public Object getControl(String str) {\r
++ return null;\r
++ }\r
++\r
++\r
++}\r
+Index: D:/project.files/java.Lab/NyARToolKit/sample/jmf/jp/nyatla/nyartoolkit/jmf/utils/JmfCaptureListener.java\r
+===================================================================\r
+--- D:/project.files/java.Lab/NyARToolKit/sample/jmf/jp/nyatla/nyartoolkit/jmf/utils/JmfCaptureListener.java (revision 0)\r
++++ D:/project.files/java.Lab/NyARToolKit/sample/jmf/jp/nyatla/nyartoolkit/jmf/utils/JmfCaptureListener.java (revision 178)\r
+@@ -0,0 +1,14 @@\r
++/**\r
++ * JMF\82¨\8eè\8cy\83L\83\83\83v\83`\83\83\97p\83\8a\83X\83i\r
++ * (c)2008 A\8cÕ\81\97nyatla.jp\r
++ * airmail@ebony.plala.or.jp\r
++ * http://nyatla.jp/\r
++ */\r
++package jp.nyatla.nyartoolkit.jmf.utils;\r
++\r
++import javax.media.Buffer;\r
++\r
++public interface JmfCaptureListener{\r
++ public void onUpdateBuffer(Buffer i_buffer);\r
++ \r
++}\r
+\ No newline at end of file\r
+Index: D:/project.files/java.Lab/NyARToolKit/sample/jmf/jp/nyatla/nyartoolkit/jmf/utils/JmfCameraCapture.java\r
+===================================================================\r
+--- D:/project.files/java.Lab/NyARToolKit/sample/jmf/jp/nyatla/nyartoolkit/jmf/utils/JmfCameraCapture.java (revision 0)\r
++++ D:/project.files/java.Lab/NyARToolKit/sample/jmf/jp/nyatla/nyartoolkit/jmf/utils/JmfCameraCapture.java (revision 178)\r
+@@ -0,0 +1,180 @@\r
++/**\r
++ * JMF\82¨\8eè\8cy\83L\83\83\83v\83`\83\83\83N\83\89\83X\r
++ * (c)2008 A\8cÕ\81\97nyatla.jp\r
++ * airmail@ebony.plala.or.jp\r
++ * http://nyatla.jp/\r
++ */\r
++package jp.nyatla.nyartoolkit.jmf.utils;\r
++\r
++\r
++\r
++import javax.media.*;\r
++import javax.media.protocol.*;\r
++import javax.media.control.*;\r
++import javax.media.format.*;\r
++import java.awt.*;\r
++import java.util.*;\r
++import javax.media.protocol.DataSource;\r
++\r
++import jp.nyatla.nyartoolkit.NyARException;\r
++\r
++\r
++\r
++\r
++\r
++public class JmfCameraCapture\r
++{\r
++ private Dimension image_size;\r
++ private JmfCaptureListener capture_listener;\r
++ private DataSource jmf_data_source;\r
++ private MonitorStream jmf_monitor_stream;\r
++ private Processor jmf_processor;\r
++ private VideoFormat jmf_video_format;\r
++ \r
++ private Buffer read_buf=new Buffer();\r
++ public static final String PIXEL_FORMAT_RGB="RGB";\r
++ public JmfCameraCapture(int i_width,int i_height,float i_rate,String i_pixcel_format)\r
++ {\r
++ String encoding = i_pixcel_format;//comboEncoding.getSelectedItem();\r
++ image_size = new Dimension(i_width,i_height);\r
++ jmf_video_format = new VideoFormat(encoding, image_size, Format.NOT_SPECIFIED,null,i_rate);\r
++ }\r
++ public Dimension getSize()\r
++ {\r
++ return image_size;\r
++ }\r
++ public javax.media.Buffer readBuffer() throws NyARException\r
++ {\r
++ if(jmf_monitor_stream==null){\r
++ throw new NyARException();\r
++ }\r
++ try{\r
++ jmf_monitor_stream.read(read_buf);\r
++ }catch(Exception e){\r
++ throw new NyARException(e);\r
++ }\r
++ return read_buf;\r
++ }\r
++ public void setCaptureListener(JmfCaptureListener i_listener) throws NyARException\r
++ {\r
++ if(jmf_processor!=null){\r
++ throw new NyARException();\r
++ }\r
++ capture_listener=i_listener;\r
++ \r
++ }\r
++ public void start() throws NyARException\r
++ {\r
++ \r
++ DataSource ds=getCaptureDS(jmf_video_format);\r
++ VideoFormat[] formats=new VideoFormat[]{new VideoFormat(null)};\r
++ ProcessorModel pm = new ProcessorModel(ds,formats,null);//, formats, ftd);\r
++ Processor processor;\r
++ try {\r
++ processor = Manager.createRealizedProcessor(pm);\r
++ } catch (Exception e){\r
++ // Make sure the capture devices are released\r
++ ds.disconnect();\r
++ throw new NyARException(e);\r
++ }\r
++ // Get the monitor control:\r
++ // Since there are more than one MonitorControl objects\r
++ // exported by the DataSource, we get the specific one\r
++ // that is also the MonitorStream object.\r
++ jmf_monitor_stream=(MonitorStream)ds.getControl("jmfsample.MonitorStream");\r
++ jmf_monitor_stream.setCaptureListener(capture_listener);\r
++ jmf_data_source=ds;\r
++ jmf_processor=processor;\r
++ jmf_processor.start();\r
++ }\r
++ public void stop()\r
++ {\r
++ jmf_processor.stop();\r
++ jmf_processor.close();\r
++ jmf_processor = null;\r
++ \r
++ }\r
++ protected void finalize()\r
++ {\r
++ if(jmf_processor!=null){\r
++ jmf_processor.stop();\r
++ jmf_processor.close();\r
++ jmf_processor = null;\r
++ }\r
++ }\r
++ private static DataSource getCaptureDS(VideoFormat vf) {\r
++ DataSource dsVideo = null;\r
++ DataSource ds = null;\r
++\r
++ // Create a capture DataSource for the video\r
++ // If there is no video capture device, then exit with null\r
++ if (vf != null) {\r
++ dsVideo = createDataSource(vf);\r
++ if (dsVideo == null)\r
++ return null;\r
++ }\r
++\r
++\r
++ // Create the monitoring datasource wrapper\r
++ if (dsVideo != null) {\r
++ dsVideo = new MonitorCDS(dsVideo);\r
++ return dsVideo;\r
++ }\r
++\r
++ // Merge the data sources, if both audio and video are available\r
++ try {\r
++ ds = Manager.createMergingDataSource(new DataSource[]{dsVideo});\r
++ } catch (IncompatibleSourceException ise){\r
++ return null;\r
++ }\r
++\r
++ return ds;\r
++ }\r
++\r
++ private static DataSource createDataSource(Format format) {\r
++ DataSource ds;\r
++ Vector devices;\r
++ CaptureDeviceInfo cdi;\r
++ MediaLocator ml;\r
++\r
++ // Find devices for format\r
++ devices = CaptureDeviceManager.getDeviceList(format);\r
++ if (devices.size() < 1) {\r
++ System.err.println("! No Devices for " + format);\r
++ return null;\r
++ }\r
++ // Pick the first device\r
++ cdi = (CaptureDeviceInfo) devices.elementAt(0);\r
++\r
++ ml = cdi.getLocator();\r
++\r
++ try {\r
++ ds = Manager.createDataSource(ml);\r
++ ds.connect();\r
++ if (ds instanceof CaptureDevice)\r
++ {\r
++ setCaptureFormat((CaptureDevice) ds, format);\r
++ }\r
++ } catch (Exception e) {\r
++ System.err.println(e);\r
++ return null;\r
++ }\r
++ return ds;\r
++ }\r
++\r
++ private static void setCaptureFormat(CaptureDevice cdev, Format format) {\r
++ FormatControl [] fcs = cdev.getFormatControls();\r
++ if (fcs.length < 1){\r
++ return;\r
++ }\r
++ FormatControl fc = fcs[0];\r
++ Format [] formats = fc.getSupportedFormats();\r
++ for (int i = 0; i < formats.length; i++) {\r
++ if (formats[i].matches(format)){\r
++ format = formats[i].intersects(format);\r
++ fc.setFormat(format);\r
++ break;\r
++ }\r
++ }\r
++ }\r
++}\r
+\ No newline at end of file\r
+Index: D:/project.files/java.Lab/NyARToolKit/sample/jmf/jp/nyatla/nyartoolkit/jmf/sample/JmfCaptureTest.java\r
+===================================================================\r
+--- D:/project.files/java.Lab/NyARToolKit/sample/jmf/jp/nyatla/nyartoolkit/jmf/sample/JmfCaptureTest.java (revision 0)\r
++++ D:/project.files/java.Lab/NyARToolKit/sample/jmf/jp/nyatla/nyartoolkit/jmf/sample/JmfCaptureTest.java (revision 178)\r
+@@ -0,0 +1,58 @@\r
++/**\r
++ * VFM\83L\83\83\83v\83`\83\83\83e\83X\83g\83v\83\8d\83O\83\89\83\80\r
++ * (c)2008 A\8cÕ\81\97nyatla.jp\r
++ * airmail@ebony.plala.or.jp\r
++ * http://nyatla.jp/\r
++ */\r
++package jp.nyatla.nyartoolkit.jmf.sample;\r
++\r
++import javax.media.*;\r
++\r
++import javax.media.util.BufferToImage;\r
++import javax.media.format.*;\r
++import jp.nyatla.nyartoolkit.NyARException;\r
++import jp.nyatla.nyartoolkit.jmf.utils.*;\r
++\r
++import java.awt.*;\r
++\r
++\r
++\r
++public class JmfCaptureTest extends Frame implements JmfCaptureListener{\r
++ public JmfCaptureTest() throws NyARException\r
++ {\r
++ setTitle("JmfCaptureTest");\r
++ setBounds(0,0,320+64,240+64); \r
++ capture=new JmfCameraCapture(320,240,30f,JmfCameraCapture.PIXEL_FORMAT_RGB);\r
++ capture.setCaptureListener(this);\r
++ }\r
++\r
++\r
++\r
++ private JmfCameraCapture capture;\r
++ public void onUpdateBuffer(Buffer i_buffer)\r
++ {\r
++ BufferToImage b2i=new BufferToImage((VideoFormat)i_buffer.getFormat());\r
++ Image img=b2i.createImage(i_buffer);\r
++ Graphics g = getGraphics(); \r
++ g.drawImage(img, 32, 32,this); \r
++ }\r
++ private void startCapture()\r
++ {\r
++ try{\r
++ capture.start();\r
++ }catch(Exception e){\r
++ e.printStackTrace();\r
++ }\r
++ }\r
++ public static void main(String[] args) {\r
++ try{\r
++ JmfCaptureTest mainwin = new JmfCaptureTest();\r
++ mainwin.setVisible(true);\r
++ mainwin.startCapture();\r
++ }catch(Exception e){\r
++ e.printStackTrace();\r
++ }\r
++ \r
++ }\r
++\r
++}\r
+Index: D:/project.files/java.Lab/NyARToolKit/sample/jmf/jp/nyatla/nyartoolkit/jmf/sample/NyarToolkitLinkTest.java\r
+===================================================================\r
+--- D:/project.files/java.Lab/NyARToolKit/sample/jmf/jp/nyatla/nyartoolkit/jmf/sample/NyarToolkitLinkTest.java (revision 0)\r
++++ D:/project.files/java.Lab/NyARToolKit/sample/jmf/jp/nyatla/nyartoolkit/jmf/sample/NyarToolkitLinkTest.java (revision 178)\r
+@@ -0,0 +1,116 @@\r
++/**\r
++ * VFM+ARToolkit\83e\83X\83g\83v\83\8d\83O\83\89\83\80\r
++ * \83J\83\81\83\89\82©\82ç\8eæ\82è\8d\9e\82ñ\82¾\83f\81[\83^\82©\82ç\83}\81[\83J\81[\82ð\8c\9f\8fo\82µ\82Ä\81A\88ê\92v\93x\82Æ\95Ï\8a·\8ds\97ñ\82ð\95\\8e¦\82µ\82Ü\82·\81B\r
++ * (c)2008 A\8cÕ\81\97nyatla.jp\r
++ * airmail(at)ebony.plala.or.jp\r
++ * http://nyatla.jp/\r
++ */\r
++package jp.nyatla.nyartoolkit.jmf.sample;\r
++\r
++import javax.media.*;\r
++\r
++import javax.media.util.BufferToImage;\r
++import javax.media.format.*;\r
++\r
++import jp.nyatla.nyartoolkit.NyARException;\r
++import jp.nyatla.nyartoolkit.jmf.utils.*;\r
++\r
++import java.awt.*;\r
++\r
++import jp.nyatla.nyartoolkit.core.*;\r
++import jp.nyatla.nyartoolkit.detector.*;\r
++\r
++\r
++\r
++\r
++\r
++\r
++public class NyarToolkitLinkTest extends Frame implements JmfCaptureListener\r
++{\r
++ private final String CARCODE_FILE ="../../Data/patt.hiro";\r
++ private final String PARAM_FILE ="../../Data/camera_para.dat";\r
++ private JmfCameraCapture capture;\r
++ NyARSingleDetectMarker nya;\r
++ JmfNyARRaster_RGB raster;\r
++\r
++ public NyarToolkitLinkTest() throws NyARException,NyARException\r
++ {\r
++ setTitle("JmfCaptureTest");\r
++ setBounds(0,0,320+64,240+64); \r
++ //\83L\83\83\83v\83`\83\83\82Ì\8f\80\94õ\r
++ capture=new JmfCameraCapture(320,240,30f,JmfCameraCapture.PIXEL_FORMAT_RGB);\r
++ capture.setCaptureListener(this);\r
++ \r
++ //NyARToolkit\82Ì\8f\80\94õ\r
++ NyARParam ar_param=new NyARParam();\r
++ NyARCode ar_code =new NyARCode(16,16);\r
++ ar_param.loadFromARFile(PARAM_FILE);\r
++ ar_param.changeSize(320,240);\r
++ nya=new NyARSingleDetectMarker(ar_param,ar_code,80.0);\r
++ ar_code.loadFromARFile(CARCODE_FILE);\r
++ //\83L\83\83\83v\83`\83\83\83C\83\81\81[\83W\97p\82Ì\83\89\83X\83^\82ð\8f\80\94õ\r
++ raster=new JmfNyARRaster_RGB(320,240);\r
++ }\r
++\r
++\r
++\r
++ public void onUpdateBuffer(Buffer i_buffer)\r
++ {\r
++ try{\r
++ //\83L\83\83\83v\83`\83\83\82µ\82½\83o\83b\83t\83@\82ð\83\89\83X\83^\82É\83Z\83b\83g\r
++ raster.setBuffer(i_buffer);\r
++\r
++ //\83L\83\83\83v\83`\83\83\82µ\82½\83C\83\81\81[\83W\82ð\95\\8e¦\97p\82É\89Á\8dH\r
++ BufferToImage b2i=new BufferToImage((VideoFormat)i_buffer.getFormat());\r
++ Image img=b2i.createImage(i_buffer);\r
++\r
++ Graphics g = getGraphics(); \r
++ double[][] atm=null;\r
++\r
++ //\83}\81[\83J\81[\8c\9f\8fo\r
++ boolean is_marker_exist=nya.detectMarkerLite(raster,100);\r
++ if(is_marker_exist){\r
++ //\95Ï\8a·\8ds\97ñ\82ð\8eæ\93¾\r
++ atm=nya.getTransmationMatrix().getArray();\r
++ }\r
++ //\8fî\95ñ\82ð\89æ\96Ê\82É\8f\91\82 \r
++ g.drawImage(img, 32, 32,this);\r
++ if(is_marker_exist){\r
++ g.drawString("\83}\81[\83J\81[\8c\9f\8fo:"+nya.getConfidence(),32,50);\r
++ for(int i=0;i<3;i++){\r
++ for(int i2=0;i2<4;i2++){\r
++ g.drawString("["+i+"]["+i2+"]"+atm[i][i2],32,50+(1+i2*3+i)*16);\r
++ }\r
++ \r
++ }\r
++ }else{\r
++ g.drawString("\83}\81[\83J\81[\96¢\8c\9f\8fo:",32,100);\r
++ }\r
++ }catch(Exception e){\r
++ e.printStackTrace();\r
++ }\r
++ \r
++ \r
++ \r
++ \r
++ }\r
++ private void startCapture()\r
++ {\r
++ try{\r
++ capture.start();\r
++ }catch(Exception e){\r
++ e.printStackTrace();\r
++ }\r
++ }\r
++ public static void main(String[] args) {\r
++ try{\r
++ NyarToolkitLinkTest mainwin = new NyarToolkitLinkTest();\r
++ mainwin.setVisible(true);\r
++ mainwin.startCapture();\r
++ }catch(Exception e){\r
++ e.printStackTrace();\r
++ }\r
++ \r
++ }\r
++\r
++}\r
+-2008.03.29 R.Iizuka nyatla.jp\r
++2008.03.29 R.Iizuka A\8cÕ\81\97nyatla.jp\r
+Index: D:/project.files/java.Lab/NyARToolKit/src/jp/nyatla/nyartoolkit/core/NyARCode.java\r
+===================================================================\r
+--- D:/project.files/java.Lab/NyARToolKit/src/jp/nyatla/nyartoolkit/core/NyARCode.java (revision 174)\r
++++ D:/project.files/java.Lab/NyARToolKit/src/jp/nyatla/nyartoolkit/core/NyARCode.java (revision 178)\r
+@@ -33,6 +33,7 @@\r
+ package jp.nyatla.nyartoolkit.core;\r
+ \r
+ import java.io.FileInputStream;\r
++import java.io.InputStream;\r
+ import java.io.InputStreamReader;\r
+ import java.io.StreamTokenizer;\r
+ \r
+@@ -84,19 +85,32 @@\r
+ pat=new int[4][height][width][3];//static int pat[AR_PATT_NUM_MAX][4][AR_PATT_SIZE_Y*AR_PATT_SIZE_X*3];\r
+ patBW=new short[4][height][width];//static int patBW[AR_PATT_NUM_MAX][4][AR_PATT_SIZE_Y*AR_PATT_SIZE_X*3];\r
+ }\r
+-\r
+-\r
+ /**\r
+ * int arLoadPatt( const char *filename );\r
+ * ARToolKit\82Ì\83p\83^\81[\83\93\83t\83@\83C\83\8b\82ð\83\8d\81[\83h\82·\82é\81B\r
++ * \83t\83@\83C\83\8b\8c`\8e®\82ÍBGR\8c`\8e®\82Å\8bL\98^\82³\82ê\82½\83p\83^\81[\83\93\83t\83@\83C\83\8b\82Å\82 \82é\82±\82Æ\81B\r
+ * @param filename\r
+ * @return\r
+ * @throws Exception\r
+ */\r
+ public void loadFromARFile(String filename) throws NyARException\r
+ {\r
++ try {\r
++ loadFromARFile(new FileInputStream(filename));\r
++\r
++ } catch (Exception e) {\r
++ throw new NyARException(e);\r
++ }\r
++ }\r
++ /**\r
++ * \r
++ * @param i_stream\r
++ * @throws NyARException\r
++ */\r
++ public void loadFromARFile(InputStream i_stream) throws NyARException\r
++ {\r
+ try{\r
+- StreamTokenizer st=new StreamTokenizer(new InputStreamReader(new FileInputStream(filename)));\r
++ StreamTokenizer st=new StreamTokenizer(new InputStreamReader(i_stream));\r
+ //\83p\83^\81[\83\93\83f\81[\83^\82ÍGBRA\82Å\95À\82ñ\82Å\82é\81B\r
+ for(int h=0; h<4; h++ ) {\r
+ int l = 0;\r
+Index: D:/project.files/java.Lab/NyARToolKit/src/jp/nyatla/nyartoolkit/core/NyARParam.java\r
+===================================================================\r
+--- D:/project.files/java.Lab/NyARToolKit/src/jp/nyatla/nyartoolkit/core/NyARParam.java (revision 174)\r
++++ D:/project.files/java.Lab/NyARToolKit/src/jp/nyatla/nyartoolkit/core/NyARParam.java (revision 178)\r
+@@ -72,18 +72,25 @@\r
+ */\r
+ public void loadFromARFile(String i_filename) throws NyARException\r
+ {\r
+- try{\r
+- FileInputStream fs=new FileInputStream(i_filename);\r
+- NyARParam new_inst[]=arParamLoad(fs,1);\r
+- fs.close();\r
+- xsize =new_inst[0].xsize;\r
+- ysize =new_inst[0].ysize;\r
+- mat =new_inst[0].mat;\r
+- dist_factor=new_inst[0].dist_factor;\r
+- }catch(Exception e){\r
+- throw new NyARException(e);\r
+- }\r
++ try {\r
++ loadFromARFile(new FileInputStream(i_filename));\r
++ } catch (Exception e) {\r
++ throw new NyARException(e);\r
++ }\r
+ }\r
++ public void loadFromARFile(InputStream i_stream) throws NyARException\r
++ {\r
++ try {\r
++ NyARParam new_inst[] = arParamLoad(i_stream, 1);\r
++ i_stream.close();\r
++ xsize = new_inst[0].xsize;\r
++ ysize = new_inst[0].ysize;\r
++ mat = new_inst[0].mat;\r
++ dist_factor = new_inst[0].dist_factor;\r
++ } catch (Exception e) {\r
++ throw new NyARException(e);\r
++ }\r
++ }\r
+ /*static double dot( double a1, double a2, double a3,double b1, double b2, double b3 )*/\r
+ private static double dot( double a1, double a2, double a3,double b1, double b2, double b3 )\r
+ {\r
+Index: D:/project.files/java.Lab/NyARToolKit/src/jp/nyatla/nyartoolkit/core/match/NyARMatchPatt.java\r
+===================================================================\r
+--- D:/project.files/java.Lab/NyARToolKit/src/jp/nyatla/nyartoolkit/core/match/NyARMatchPatt.java (revision 174)\r
++++ D:/project.files/java.Lab/NyARToolKit/src/jp/nyatla/nyartoolkit/core/match/NyARMatchPatt.java (revision 178)\r
+@@ -49,7 +49,7 @@\r
+ public double getConfidence();\r
+ public int getDirection();\r
+ public void evaluate(NyARCode i_code);\r
+- public void setPatt(NyARColorPatt i_target_patt) throws NyARException;\r
++ public boolean setPatt(NyARColorPatt i_target_patt) throws NyARException;\r
+ }\r
+ \r
+ \r
+Index: D:/project.files/java.Lab/NyARToolKit/src/jp/nyatla/nyartoolkit/core/match/NyARMatchPatt_Color_WITHOUT_PCA.java\r
+===================================================================\r
+--- D:/project.files/java.Lab/NyARToolKit/src/jp/nyatla/nyartoolkit/core/match/NyARMatchPatt_Color_WITHOUT_PCA.java (revision 174)\r
++++ D:/project.files/java.Lab/NyARToolKit/src/jp/nyatla/nyartoolkit/core/match/NyARMatchPatt_Color_WITHOUT_PCA.java (revision 178)\r
+@@ -54,7 +54,7 @@\r
+ public int getDirection(){\r
+ return dir;\r
+ }\r
+- public void setPatt(NyARColorPatt i_target_patt) throws NyARException\r
++ public boolean setPatt(NyARColorPatt i_target_patt) throws NyARException\r
+ {\r
+ width=i_target_patt.getWidth();\r
+ height=i_target_patt.getHeight();\r
+@@ -81,11 +81,12 @@\r
+ }\r
+ datapow = Math.sqrt( (double)sum );\r
+ if(datapow == 0.0){\r
+- throw new NyARException();\r
++ return false;// throw new NyARException();\r
+ // dir.set(0);//*dir = 0;\r
+ // cf.set(-1.0);//*cf = -1.0;\r
+ // return -1;\r
+- } \r
++ }\r
++ return true;\r
+ }\r
+ /**\r
+ * public int pattern_match(short[][][] data,IntPointer dir,DoublePointer cf)\r
+Index: D:/project.files/java.Lab/NyARToolKit/src/jp/nyatla/nyartoolkit/core/match/NyARMatchPatt_Color_WITH_PCA.java\r
+===================================================================\r
+--- D:/project.files/java.Lab/NyARToolKit/src/jp/nyatla/nyartoolkit/core/match/NyARMatchPatt_Color_WITH_PCA.java (revision 174)\r
++++ D:/project.files/java.Lab/NyARToolKit/src/jp/nyatla/nyartoolkit/core/match/NyARMatchPatt_Color_WITH_PCA.java (revision 178)\r
+@@ -59,7 +59,7 @@\r
+ public int getDirection(){\r
+ return dir;\r
+ }\r
+- public void setPatt(NyARColorPatt i_target_patt) throws NyARException\r
++ public boolean setPatt(NyARColorPatt i_target_patt) throws NyARException\r
+ {\r
+ width=i_target_patt.getWidth();\r
+ height=i_target_patt.getHeight();\r
+@@ -87,11 +87,12 @@\r
+ }\r
+ datapow = Math.sqrt( (double)sum );\r
+ if(datapow == 0.0){\r
+- throw new NyARException();\r
++ return false;//throw new NyARException();\r
+ // dir.set(0);//*dir = 0;\r
+ // cf.set(-1.0);//*cf = -1.0;\r
+ // return -1;\r
+- } \r
++ }\r
++ return true;\r
+ }\r
+ /**\r
+ * public int pattern_match(short[][][] data,IntPointer dir,DoublePointer cf)\r
+Index: D:/project.files/java.Lab/NyARToolKit/src/jp/nyatla/nyartoolkit/core/match/NyARMatchPatt_BlackWhite.java\r
+===================================================================\r
+--- D:/project.files/java.Lab/NyARToolKit/src/jp/nyatla/nyartoolkit/core/match/NyARMatchPatt_BlackWhite.java (revision 174)\r
++++ D:/project.files/java.Lab/NyARToolKit/src/jp/nyatla/nyartoolkit/core/match/NyARMatchPatt_BlackWhite.java (revision 178)\r
+@@ -47,7 +47,7 @@\r
+ private int dir=0;\r
+ private int ave;\r
+ private int[][][] input=new int[height][width][3];\r
+- public void setPatt(NyARColorPatt i_target_patt) throws NyARException\r
++ public boolean setPatt(NyARColorPatt i_target_patt) throws NyARException\r
+ {\r
+ width=i_target_patt.getWidth();\r
+ height=i_target_patt.getHeight();\r
+@@ -71,11 +71,12 @@\r
+ \r
+ datapow = Math.sqrt( (double)sum );\r
+ if( datapow == 0.0 ){\r
+- throw new NyARException();\r
++ return false;// throw new NyARException();\r
+ // dir.set(0);//*dir = 0;\r
+ // cf.set(-1.0);//*cf = -1.0;\r
+ // return -1;\r
+ }\r
++ return true;\r
+ }\r
+ public double getConfidence()\r
+ {\r
+Index: D:/project.files/java.Lab/NyARToolKit/src/jp/nyatla/nyartoolkit/detector/NyARSingleDetectMarker.java\r
+===================================================================\r
+--- D:/project.files/java.Lab/NyARToolKit/src/jp/nyatla/nyartoolkit/detector/NyARSingleDetectMarker.java (revision 174)\r
++++ D:/project.files/java.Lab/NyARToolKit/src/jp/nyatla/nyartoolkit/detector/NyARSingleDetectMarker.java (revision 178)\r
+@@ -91,7 +91,10 @@\r
+ //\83p\83^\81[\83\93\82Ì\95]\89¿\83I\83u\83W\83F\83N\83g\82ð\8dì\82é\81B\r
+ NyARMatchPatt_Color_WITHOUT_PCA eva=new NyARMatchPatt_Color_WITHOUT_PCA();\r
+ //\83p\83^\81[\83\93\82ð\95]\89¿\8aí\82É\83Z\83b\83g\r
+- eva.setPatt(patt);\r
++ if(!eva.setPatt(patt)){\r
++ //\8cv\8eZ\82É\8e¸\94s\82µ\82½\81B\r
++ return false;\r
++ }\r
+ //\83R\81[\83h\82Æ\94ä\8ar\82·\82é\r
+ eva.evaluate(code);\r
+ int square_index=0;\r