OSDN Git Service

[リリース]NyARToolkit 0.8
authornyatla <nyatla@7cac0a50-4618-4814-88d0-24b83990f816>
Sat, 7 Jun 2008 02:25:25 +0000 (02:25 +0000)
committernyatla <nyatla@7cac0a50-4618-4814-88d0-24b83990f816>
Sat, 7 Jun 2008 02:25:25 +0000 (02:25 +0000)
不足ファイルを追加

changelog/0.8.20080412.0.txt [new file with mode: 0644]
sample/java3d/.classpath [new file with mode: 0644]
sample/java3d/.project [new file with mode: 0644]
sample/java3d/src/jp/nyatla/nyartoolkit/java3d/sample/NyARJava3D.java [new file with mode: 0644]
sample/java3d/src/jp/nyatla/nyartoolkit/java3d/utils/J3dNyARParam.java [new file with mode: 0644]
sample/java3d/src/jp/nyatla/nyartoolkit/java3d/utils/J3dNyARRaster_RGB.java [new file with mode: 0644]
sample/java3d/src/jp/nyatla/nyartoolkit/java3d/utils/NyARSingleMarkerBehaviorHolder.java [new file with mode: 0644]
sample/java3d/src/jp/nyatla/nyartoolkit/java3d/utils/NyARSingleMarkerBehaviorListener.java [new file with mode: 0644]

diff --git a/changelog/0.8.20080412.0.txt b/changelog/0.8.20080412.0.txt
new file mode 100644 (file)
index 0000000..2bccbce
--- /dev/null
@@ -0,0 +1,3158 @@
+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\90\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
diff --git a/sample/java3d/.classpath b/sample/java3d/.classpath
new file mode 100644 (file)
index 0000000..aa87143
--- /dev/null
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<classpath>\r
+       <classpathentry path="src" kind="src"/>\r
+       <classpathentry path="org.eclipse.jdt.launching.JRE_CONTAINER" kind="con"/>\r
+       <classpathentry path="C:/Program Files/Java/Java3D/1.4.0_01/lib/ext/j3dcore.jar" kind="lib"/>\r
+       <classpathentry path="C:/Program Files/Java/Java3D/1.4.0_01/lib/ext/j3dutils.jar" kind="lib"/>\r
+       <classpathentry path="C:/Program Files/Java/Java3D/1.4.0_01/lib/ext/vecmath.jar" kind="lib"/>\r
+       <classpathentry path="C:/Program Files/JMF2.1.1e/lib/jmf.jar" kind="lib"/>\r
+       <classpathentry path="/NyARJMF" combineaccessrules="false" kind="src"/>\r
+       <classpathentry path="/NyARToolkit" combineaccessrules="false" kind="src"/>\r
+       <classpathentry path="bin" kind="output"/>\r
+</classpath>\r
diff --git a/sample/java3d/.project b/sample/java3d/.project
new file mode 100644 (file)
index 0000000..71300e9
--- /dev/null
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<projectDescription>\r
+       <name>NyARJava3D</name>\r
+       <comment></comment>\r
+       <projects>\r
+       </projects>\r
+       <buildSpec>\r
+               <buildCommand>\r
+                       <name>org.eclipse.jdt.core.javabuilder</name>\r
+                       <arguments>\r
+                       </arguments>\r
+               </buildCommand>\r
+       </buildSpec>\r
+       <natures>\r
+               <nature>org.eclipse.jdt.core.javanature</nature>\r
+       </natures>\r
+</projectDescription>\r
diff --git a/sample/java3d/src/jp/nyatla/nyartoolkit/java3d/sample/NyARJava3D.java b/sample/java3d/src/jp/nyatla/nyartoolkit/java3d/sample/NyARJava3D.java
new file mode 100644 (file)
index 0000000..3595256
--- /dev/null
@@ -0,0 +1,148 @@
+/**\r
+ * Java3Dサンプルプログラム\r
+ * シングルマーカー追跡用のBehaviorを使って、背景と1個のマーカーに連動したTransformGroup\r
+ * を動かします。\r
+ * (c)2008 A虎@nyatla.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関係\r
+    private NyARSingleMarkerBehaviorHolder nya_behavior;\r
+    private J3dNyARParam ar_param;\r
+    //universe関係\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
+        * マーカーの姿勢を元に他の3Dオブジェクトを操作するときは、ここに処理を書きます。*/\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の準備\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の作成とlocateとviewの設定\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
+        //視界の設定(カメラ設定から取得)\r
+        Transform3D camera_3d=ar_param.getCameraTransform();\r
+        view.setCompatibilityModeEnable(true);\r
+        view.setProjectionPolicy(View.PERSPECTIVE_PROJECTION);\r
+        view.setLeftProjection(camera_3d);\r
+        \r
+        //視点設定(0,0,0から、Y軸を180度回転してZ+方向を向くようにする。)\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
+       //バックグラウンドの作成\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で囲ったシーングラフの作成\r
+       TransformGroup transform=new TransformGroup();\r
+       transform.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);\r
+       transform.addChild(createSceneGraph());\r
+       root.addChild(transform);\r
+               \r
+        //NyARToolkitのBehaviorを作る。(マーカーサイズはメートルで指定すること)\r
+       nya_behavior=new NyARSingleMarkerBehaviorHolder(ar_param,30f,ar_code,0.08);\r
+       //Behaviorに連動するグループをセット\r
+       nya_behavior.setTransformGroup(transform);\r
+       nya_behavior.setBackGround(background);\r
+       \r
+       //出来たbehaviorをセット\r
+       root.addChild(nya_behavior.getBehavior());\r
+       nya_behavior.setUpdateListener(this);\r
+       \r
+       //表示ブランチをLocateにセット\r
+       locale.addBranchGraph(root);\r
+      \r
+       //ウインドウの設定\r
+       setLayout(new BorderLayout());\r
+       add(canvas,BorderLayout.CENTER);\r
+    }\r
+    /**\r
+     * シーングラフを作って、そのノードを返す。\r
+     * このノードは40mmの色つきナタデココを表示するシーン。z軸を基準に20mm上に浮かせてる。\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
+        // 大きさ 40mmの色付き立方体を、Z軸上で20mm動かして配置)\r
+        tg.setTransform(mt);\r
+        tg.addChild(new ColorCube(20*0.001));\r
+        return tg;\r
+    }\r
+}\r
diff --git a/sample/java3d/src/jp/nyatla/nyartoolkit/java3d/utils/J3dNyARParam.java b/sample/java3d/src/jp/nyatla/nyartoolkit/java3d/utils/J3dNyARParam.java
new file mode 100644 (file)
index 0000000..420e6d4
--- /dev/null
@@ -0,0 +1,119 @@
+/**\r
+ * NyARParamにOpenGL向け関数を追加したもの\r
+ * (c)2008 A虎@nyatla.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~10.0m\r
+    private double view_distance_max=10.0;\r
+    private Transform3D m_projection=null;\r
+    /**\r
+     * 視体積の近い方をメートルで指定\r
+     * @param i_new_value\r
+     */\r
+    public void setViewDistanceMin(double i_new_value)\r
+    {\r
+       m_projection=null;//キャッシュ済変数初期化\r
+       view_distance_min=i_new_value;\r
+    }\r
+    /**\r
+     * 視体積の遠い方をメートルで指定\r
+     * @param i_new_value\r
+     */\r
+    public void setViewDistanceMax(double i_new_value)\r
+    {\r
+       m_projection=null;//キャッシュ済変数初期化\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
+     * 関数の置き換え\r
+     * @param focalmin\r
+     * @param focalmax\r
+     * @return\r
+     */\r
+    public Transform3D getCameraTransform()\r
+    {\r
+       //既に値がキャッシュされていたらそれを使う\r
+       if(m_projection!=null){\r
+           return m_projection;\r
+       }\r
+       //無ければ計算\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の計算\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
diff --git a/sample/java3d/src/jp/nyatla/nyartoolkit/java3d/utils/J3dNyARRaster_RGB.java b/sample/java3d/src/jp/nyatla/nyartoolkit/java3d/utils/J3dNyARRaster_RGB.java
new file mode 100644 (file)
index 0000000..73d2ba3
--- /dev/null
@@ -0,0 +1,64 @@
+/**\r
+ * NyARRaster_RGBにOpenGL向け関数を追加したもの\r
+ * (c)2008 A虎@nyatla.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
+        //メモ:この時点では、ref_dataにはi_bufferの参照値が入ってる。\r
+        synchronized(imc2d){\r
+            //キャプチャデータをi2dのバッファにコピーする。(これ省略したいなあ…。)\r
+            System.arraycopy(ref_buf,0,i2d_buf,0,this.i2d_buf.length);\r
+        }\r
+       //ここでref_bufの参照値をref_bufへ移動\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のラスタを作る。\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
+     * このオブジェクトと連動するImageComponent2Dオブジェクトの参照値を得る。\r
+     * @return\r
+     */\r
+    public ImageComponent2D getImageComponent2D()\r
+    {\r
+       return imc2d;\r
+    }\r
+}\r
diff --git a/sample/java3d/src/jp/nyatla/nyartoolkit/java3d/utils/NyARSingleMarkerBehaviorHolder.java b/sample/java3d/src/jp/nyatla/nyartoolkit/java3d/utils/NyARSingleMarkerBehaviorHolder.java
new file mode 100644 (file)
index 0000000..af3fc6f
--- /dev/null
@@ -0,0 +1,191 @@
+/**\r
+ * NyARToolkitのBehaviorホルダー\r
+ * (c)2008 A虎@nyatla.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と連動したBehaviorを返却するクラスです。\r
+ * 提供できるBehaviorは、BackgroundとTransformgroupです。\r
+ *\r
+ */\r
+public class NyARSingleMarkerBehaviorHolder implements JmfCaptureListener\r
+{\r
+    private NyARParam cparam;\r
+    private JmfCameraCapture capture;\r
+    private J3dNyARRaster_RGB nya_raster;//最大3スレッドで共有されるので、排他制御かけること。\r
+    private NyARSingleDetectMarker nya;\r
+    //Behaviorホルダ\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にキャプチャ画像を転送するようにBehaviorを設定します。\r
+     * i_back_groungはALLOW_IMAGE_WRITE属性を持つものである必要があります。\r
+     * @param i_back_groung\r
+     * @return\r
+     */\r
+    public void setBackGround(Background i_back_ground)\r
+    {\r
+       //コール先で排他制御\r
+        nya_behavior.setRelatedBackGround(i_back_ground);\r
+    }\r
+    /**\r
+     * i_trgroupの座標系をマーカーにあわせるようにBehaviorを設定します。\r
+     *\r
+     */\r
+    public void setTransformGroup(TransformGroup i_trgroup)\r
+    {\r
+       //コール先で排他制御\r
+        nya_behavior.setRelatedTransformGroup(i_trgroup);\r
+    }\r
+    /**\r
+     * 座標系再計算後に呼び出されるリスナです。\r
+     * @param i_listener\r
+     */\r
+    public void setUpdateListener(NyARSingleMarkerBehaviorListener i_listener)\r
+    {\r
+       //コール先で排他制御\r
+       nya_behavior.setUpdateListener(i_listener);\r
+    }\r
+    /**\r
+     * ラスタを更新 コールバック関数だから呼んじゃらめえ\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
+       //開始\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の内容で定期的にi_back_groundを更新する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
+     * いわゆるイベントハンドラ\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
diff --git a/sample/java3d/src/jp/nyatla/nyartoolkit/java3d/utils/NyARSingleMarkerBehaviorListener.java b/sample/java3d/src/jp/nyatla/nyartoolkit/java3d/utils/NyARSingleMarkerBehaviorListener.java
new file mode 100644 (file)
index 0000000..60bbc29
--- /dev/null
@@ -0,0 +1,24 @@
+/**\r
+ * NyARToolkitのBehaviorのリスナ\r
+ * (c)2008 A虎@nyatla.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
+     * このリスナは、リスナにマーカーに連動してオブジェクトを操作するチャンスを与えます。\r
+     * リスナはNyARSingleMarkerBehavior関数内のprocessStimulus関数から呼び出されます。\r
+     * \r
+     * @param i_is_marker_exist\r
+     * マーカーが存在する場合true、存在しない場合、falseです。\r
+     * @param i_transform3d\r
+     * マーカーが存在する場合、その変換行列が指定されます。\r
+     * i_is_marker_existがtrueの時だけ有効です。\r
+     */\r
+    public void onUpdate(boolean i_is_marker_exist,Transform3D i_transform3d);\r
+}\r