OSDN Git Service

[リリース]NyARToolkit 0.8
authornyatla <nyatla@7cac0a50-4618-4814-88d0-24b83990f816>
Sat, 7 Jun 2008 02:02:45 +0000 (02:02 +0000)
committernyatla <nyatla@7cac0a50-4618-4814-88d0-24b83990f816>
Sat, 7 Jun 2008 02:02:45 +0000 (02:02 +0000)
21 files changed:
readme.ja.txt
sample/jmf/jp/nyatla/nyartoolkit/jmf/sample/JmfCaptureTest.java [moved from sample/jmf/JmfCaptureTest.java with 91% similarity]
sample/jmf/jp/nyatla/nyartoolkit/jmf/sample/NyarToolkitLinkTest.java [moved from sample/jmf/NyarToolkitLinkTest.java with 95% similarity]
sample/jmf/jp/nyatla/nyartoolkit/jmf/utils/JmfCameraCapture.java [moved from sample/jmf/jp/nyatla/nyartoolkit/jmf/JmfCameraCapture.java with 94% similarity]
sample/jmf/jp/nyatla/nyartoolkit/jmf/utils/JmfCaptureListener.java [moved from sample/jmf/jp/nyatla/nyartoolkit/jmf/JmfCaptureListener.java with 72% similarity]
sample/jmf/jp/nyatla/nyartoolkit/jmf/utils/JmfNyARRaster_RGB.java [moved from sample/jmf/jp/nyatla/nyartoolkit/jmfutil/JmfNyARRaster_RGB.java with 79% similarity]
sample/jmf/jp/nyatla/nyartoolkit/jmf/utils/MonitorCDS.java [moved from sample/jmf/jp/nyatla/nyartoolkit/jmf/MonitorCDS.java with 98% similarity]
sample/jmf/jp/nyatla/nyartoolkit/jmf/utils/MonitorStream.java [moved from sample/jmf/jp/nyatla/nyartoolkit/jmf/MonitorStream.java with 99% similarity]
sample/jogl/jp/nyatla/nyartoolkit/gutil/GLNyARRaster_RGB.java [deleted file]
sample/jogl/jp/nyatla/nyartoolkit/jogl/sample/JavaSimpleLite.java [moved from sample/jogl/JavaSimpleLite.java with 85% similarity]
sample/jogl/jp/nyatla/nyartoolkit/jogl/utils/GLNyARParam.java [moved from sample/jogl/jp/nyatla/nyartoolkit/gutil/GLNyARParam.java with 95% similarity]
sample/jogl/jp/nyatla/nyartoolkit/jogl/utils/GLNyARRaster_RGB.java [new file with mode: 0644]
sample/jogl/jp/nyatla/nyartoolkit/jogl/utils/GLNyARSingleDetectMarker.java [moved from sample/jogl/jp/nyatla/nyartoolkit/gutil/GLNyARSingleDetectMarker.java with 93% similarity]
sample/jogl/jp/nyatla/nyartoolkit/jogl/utils/NyARGLUtil.java [new file with mode: 0644]
src/jp/nyatla/nyartoolkit/core/NyARCode.java
src/jp/nyatla/nyartoolkit/core/NyARParam.java
src/jp/nyatla/nyartoolkit/core/match/NyARMatchPatt.java
src/jp/nyatla/nyartoolkit/core/match/NyARMatchPatt_BlackWhite.java
src/jp/nyatla/nyartoolkit/core/match/NyARMatchPatt_Color_WITHOUT_PCA.java
src/jp/nyatla/nyartoolkit/core/match/NyARMatchPatt_Color_WITH_PCA.java
src/jp/nyatla/nyartoolkit/detector/NyARSingleDetectMarker.java

index d2ed0f1..601f2eb 100644 (file)
@@ -1,7 +1,7 @@
 ARToolkit Java class library NyARToolkit.\r
 Copyright (C)2008 R.Iizuka\r
 \r
-version Alpha 0.7.20080406.0\r
+version Alpha 0.8.20080412.0\r
 \r
 http://nyatla.jp/\r
 airmail(at)ebony.plala.or.jp\r
@@ -28,21 +28,21 @@ http://www.hitl.washington.edu/artoolkit/
 \r
 \r
 \r
-・基本構成\r
+・構成\r
 \r
-+-----------------------------+\r
-|         Application         |\r
-+-------+-------+-------------+\r
-|NyARJMF| NyARJogl|           |\r
-+-------+---------+           |\r
-|  JMF  |  JOGL   |NyARToolkit|\r
-+-------+---------+           |\r
-|Camera |  3D     |           |\r
-------------------------------+\r
++-------------------------------------------+\r
+|               Application                 |\r
++-------+---------+-------+-----------------+\r
+|NyARJMF| NyARJogl|NyARJ3d|                 |\r
++-------+---------+-------+                 |\r
+|  JMF  |  JOGL   |Java3D |Java3DNyARToolkit|\r
++-------+---------+-------+                 |\r
+|Camera |       3D        |                 |\r
+--------------------------------------------+\r
 \r
-映像キャプチャにはJMFを使用し、3D描画にはJoglを使用しています。\r
-NyARJMFとNyJoglは、これらのエクステンションをApplicationやNyARToolKit\r
-から使いやすくするためのラッパーです。\r
+映像キャプチャにはJMFを使用し、3D描画にはJOGL又はJava3Dを使用しています。\r
+NyARJMFとNyJogl,NyJ3dは、これらのエクステンションをApplicationや\r
+NyARToolKitから使いやすくするためのラッパーです。\r
 \r
 これらとNyARToolkitは完全に分離していますので、入力・出力ともに容易に\r
 差し替えが出来ると思います。\r
@@ -52,34 +52,57 @@ NyARJMFとNyJoglは、これらのエクステンションをApplicationやNyART
 \r
 ・サンプルなど\r
 \r
-動作させる前に、JMFとJOGLをインストールしてください。\r
\8b\95ä½\9cã\81\95ã\81\9bã\82\8bå\89\8dã\81«ã\80\81JMFã\81¨JOGLã\81\8bJava3Dã\82\92ã\82¤ã\83³ã\82¹ã\83\88ã\83¼ã\83«ã\81\97ã\81¦ã\81\8fã\81 ã\81\95ã\81\84ã\80\82\r
 動作確認したバージョンと入手先はこちらです。\r
 \r
 JMF JavaTM Media Framework 2.1.1e\r
 http://java.sun.com/products/java-media/jmf/index.jsp\r
 \r
-jogl-1.1.1-pre-20080328-windows-i586.zip\r
+jogl-1.1.1-pre-20080328-xxxx-i586.zip\r
 https://jogl.dev.java.net/\r
 \r
+java3d-1_5_1-xxxx-i586.exe\r
+https://java3d.dev.java.net/binary-builds.html\r
+\r
+\r
 \r
 サンプルは以下のディレクトリにあります。\r
 \r
 ./src\r
-NyARToolkitのEclipseプロジェクトがあります。\r
-jp.nyatla.nyartoolkit.sampleパッケージに、Rawイメージから\r
-変換行列を求めるサンプルがあります。\r
+ NyARToolkitのEclipseプロジェクトがあります。\r
+ jp.nyatla.nyartoolkit.sampleパッケージに、Rawイメージから\r
+ 変換行列を求めるサンプルがあります。\r
 \r
 ./sample\r
 NyARToolkitのアプリケーションサンプルEclipseプロジェクトがあります。\r
-NyARJMFにはビデオキャプチャの試験プログラムと、マーカー検出プログラムがあります。\r
-NyARJOGLにはARToolkitのsimpleLite相当のサンプルがあります。\r
 \r
-NyARJMFのプロジェクトはNyARToolKitに依存し、NyARJOGLのプロジェクトはNyARToolKit\r
-とNyARJMFに依存しています。\r
+ jmf\r
+  jp.nyatla.nyartoolkit.jmf.sample\r
+  ビデオキャプチャの試験プログラム と、マーカー検出プログラムがあります。\r
+\r
+ jogl\r
+  jp.nyatla.nyartoolkit.jogl.sample\r
+  ARToolkitのsimpleLite相当のサンプルがあります。\r
+\r
+ java3d\r
+  jp.nyatla.nyartoolkit.java3d.sample\r
+  simpleLiteのようなものをJava3Dで動かすサンプルがあります。\r
+\r
+\r
+NyARJMFのプロジェクトはNyARToolKitに依存し、NyARJOGLとJava3Dのプロジェクトは\r
+NyARToolKitとNyARJMFに依存しています。\r
 zipを展開すると多分参照関係が壊れてますので、再設定してください。\r
 \r
 \r
 \r
+・サンプル内のパッケージ注意点\r
+sampleディレクトリ以下にあるソースはAPIは仕様が固まっていないので、\r
+時々APIそのものを変更しています。\r
+\r
+自前のプロジェクトの部品として使われる場合は、パッケージをコピーして\r
+使用することをお勧めします。\r
+\r
+\r
 \r
 ・NyARToolkitとオリジナルの差分\r
 \r
@@ -117,4 +140,4 @@ NyARToolkitを使って面白いものが出来たら、是非教えてくださ
 \r
 ではでは、楽しく遊んでくださいネ。\r
 \r
-2008.03.29 R.Iizuka nyatla.jp\r
+2008.03.29 R.Iizuka A虎@nyatla.jp\r
@@ -1,16 +1,18 @@
 /**
  * VFMキャプチャテストプログラム
- * (c)2008 R.iizuka
+ * (c)2008 A虎@nyatla.jp
  * airmail@ebony.plala.or.jp
  * http://nyatla.jp/
  */
+package jp.nyatla.nyartoolkit.jmf.sample;
+
 import javax.media.*;
 
 import javax.media.util.BufferToImage;
 import javax.media.format.*;
-
 import jp.nyatla.nyartoolkit.NyARException;
-import jp.nyatla.nyartoolkit.jmf.*;
+import jp.nyatla.nyartoolkit.jmf.utils.*;
+
 import java.awt.*;
 
 
@@ -1,23 +1,25 @@
 /**
  * VFM+ARToolkitテストプログラム
  * カメラから取り込んだデータからマーカーを検出して、一致度と変換行列を表示します。
- * (c)2008 R.iizuka
+ * (c)2008 A虎@nyatla.jp
  * airmail(at)ebony.plala.or.jp
  * http://nyatla.jp/
  */
+package jp.nyatla.nyartoolkit.jmf.sample;
+
 import javax.media.*;
 
 import javax.media.util.BufferToImage;
 import javax.media.format.*;
 
 import jp.nyatla.nyartoolkit.NyARException;
-import jp.nyatla.nyartoolkit.jmf.*;
-import jp.nyatla.nyartoolkit.jmfutil.*;
+import jp.nyatla.nyartoolkit.jmf.utils.*;
+
 import java.awt.*;
 
 import jp.nyatla.nyartoolkit.core.*;
 import jp.nyatla.nyartoolkit.detector.*;
-import jp.nyatla.nyartoolkit.core.raster.*;
+
 
 
 
@@ -1,10 +1,10 @@
 /**\r
  * JMFお手軽キャプチャクラス\r
- * (c)2008 R.Iizuka\r
+ * (c)2008 A虎@nyatla.jp\r
  * airmail@ebony.plala.or.jp\r
  * http://nyatla.jp/\r
  */\r
-package jp.nyatla.nyartoolkit.jmf;\r
+package jp.nyatla.nyartoolkit.jmf.utils;\r
 \r
 \r
 \r
@@ -1,10 +1,10 @@
 /**\r
  * JMFお手軽キャプチャ用リスナ\r
- * (c)2008 R.Iizuka\r
+ * (c)2008 A虎@nyatla.jp\r
  * airmail@ebony.plala.or.jp\r
  * http://nyatla.jp/\r
  */\r
-package jp.nyatla.nyartoolkit.jmf;\r
+package jp.nyatla.nyartoolkit.jmf.utils;\r
 \r
 import javax.media.Buffer;\r
 \r
@@ -1,11 +1,11 @@
 /**\r
  * RGB形式のJMFバッファをラップするNyARRasterです。\r
- * 複数のピクセルの並び順に対応してます。\r
- * (c)2008 R.iizuka\r
+ * JMFから得たラスタデータのピクセル並び順を考慮します。\r
+ * (c)2008 A虎@nyatla.jp\r
  * airmail(at)ebony.plala.or.jp\r
  * http://nyatla.jp/\r
  */\r
-package jp.nyatla.nyartoolkit.jmfutil;\r
+package jp.nyatla.nyartoolkit.jmf.utils;\r
 \r
 \r
 import javax.media.format.RGBFormat;\r
@@ -38,26 +38,22 @@ public class JmfNyARRaster_RGB implements NyARRaster
        height=i_height;\r
     }\r
     /**\r
-     * javax.media.Bufferを分析して、その分析結果をNyARRasterに適合する形で保持します。\r
-     * 関数実行後に外部でi_bufferの内容変更した場合には、再度setBuffer関数を呼び出してください。\r
+     * フォーマットを解析して、インスタンスのフォーマットプロパティを初期化します。\r
+     * \r
      * @param i_buffer\r
-     * RGB形式のデータを格納したjavax.media.Bufferオブジェクトを指定してください。\r
-     * @return\r
-     * i_bufferをラップしたオブジェクトを返します。\r
      * @throws NyARException\r
      */\r
-    public void setBuffer(javax.media.Buffer i_buffer) throws NyARException\r
+    protected void initFormatProperty(RGBFormat i_fmt) throws NyARException\r
     {\r
-       RGBFormat fmt=(RGBFormat)i_buffer.getFormat();\r
        //データサイズの確認\r
-        Dimension s=fmt.getSize();\r
+        Dimension s=i_fmt.getSize();\r
         if(width!=s.width || height !=s.height){\r
            throw new NyARException();\r
         }\r
        //データ配列の確認\r
-       red_idx  =fmt.getRedMask()-1;\r
-       green_idx=fmt.getGreenMask()-1;\r
-       blue_idx =fmt.getBlueMask()-1;\r
+       red_idx  =i_fmt.getRedMask()-1;\r
+       green_idx=i_fmt.getGreenMask()-1;\r
+       blue_idx =i_fmt.getBlueMask()-1;\r
        \r
        //色配列の特定\r
        if(red_idx==0 && blue_idx==2){\r
@@ -67,6 +63,19 @@ public class JmfNyARRaster_RGB implements NyARRaster
        }else{\r
            throw new NyARException("Unknown pixel order.");\r
        }       \r
+    }\r
+    /**\r
+     * javax.media.Bufferを分析して、その分析結果をNyARRasterに適合する形で保持します。\r
+     * 関数実行後に外部でi_bufferの内容変更した場合には、再度setBuffer関数を呼び出してください。\r
+     * @param i_buffer\r
+     * RGB形式のデータを格納したjavax.media.Bufferオブジェクトを指定してください。\r
+     * @return\r
+     * i_bufferをラップしたオブジェクトを返します。\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
@@ -25,7 +25,7 @@
  * facility. Licensee represents and warrants that it will not use or
  * redistribute the Software for such purposes.
  */
-package jp.nyatla.nyartoolkit.jmf;
+package jp.nyatla.nyartoolkit.jmf.utils;
 
 
 import javax.media.*;
@@ -25,7 +25,7 @@
  * facility. Licensee represents and warrants that it will not use or
  * redistribute the Software for such purposes.
  */
-package jp.nyatla.nyartoolkit.jmf;
+package jp.nyatla.nyartoolkit.jmf.utils;
 
 
 
diff --git a/sample/jogl/jp/nyatla/nyartoolkit/gutil/GLNyARRaster_RGB.java b/sample/jogl/jp/nyatla/nyartoolkit/gutil/GLNyARRaster_RGB.java
deleted file mode 100644 (file)
index 2763214..0000000
+++ /dev/null
@@ -1,138 +0,0 @@
-/**\r
- * NyARRaster_RGBにOpenGL向け関数を追加したものです。\r
- * \r
- * (c)2008 R.iizuka\r
- * airmail(at)ebony.plala.or.jp\r
- * http://nyatla.jp/\r
- */\r
-package jp.nyatla.nyartoolkit.gutil;\r
-\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.NyARException;\r
-import jp.nyatla.nyartoolkit.core.NyARParam;\r
-import jp.nyatla.nyartoolkit.jmfutil.*;\r
-\r
-public class GLNyARRaster_RGB extends JmfNyARRaster_RGB\r
-{\r
-    private NyARParam cparam;\r
-    private GL ref_gl;\r
-    private GLU glu;\r
-    private byte[] gl_buf;\r
-    private int gl_flag;\r
-\r
-    public GLNyARRaster_RGB(GL i_ref_gl,NyARParam i_cparam)\r
-    {\r
-       super(i_cparam.getX(),i_cparam.getY());\r
-       gl_flag=GL.GL_RGB;\r
-       cparam=i_cparam;\r
-       ref_gl=i_ref_gl;\r
-       glu=new GLU();\r
-       this.gl_buf=new byte[width*height*3];\r
-    }\r
-    public void setBuffer(javax.media.Buffer i_buffer,boolean i_is_reverse) throws NyARException\r
-    {\r
-       super.setBuffer(i_buffer);\r
-       //メモ:この時点では、ref_dataにはi_bufferの参照値が入ってる。\r
-       \r
-       //GL用のデータを準備\r
-       if(i_is_reverse){\r
-           int length=width*3;\r
-           int src_idx=0;\r
-           int dest_idx=(height-1)*length;\r
-           for(int i=0;i<height;i++){\r
-               System.arraycopy(ref_buf,src_idx,gl_buf,dest_idx,length);\r
-               src_idx+=length;\r
-               dest_idx-=length;\r
-           }\r
-       }else{\r
-           System.arraycopy(ref_buf,0,gl_buf,0,this.ref_buf.length);\r
-       }\r
-       //GLのフラグ設定\r
-       switch(this.pix_type){\r
-       case GLNyARRaster_RGB.PIXEL_ORDER_BGR:\r
-            gl_flag=GL.GL_BGR;\r
-            break;\r
-       case GLNyARRaster_RGB.PIXEL_ORDER_RGB:\r
-            gl_flag=GL.GL_RGB;\r
-            break;\r
-        default:\r
-            throw new NyARException();\r
-       }\r
-       //ref_bufをgl_bufに差し替える\r
-       ref_buf=gl_buf;\r
-    }\r
-    /**\r
-     * 保持してるイメージをGLに出力する。\r
-     * @param image\r
-     * @param zoom\r
-     */\r
-    public void glDispImage(double zoom)\r
-    {\r
-       IntBuffer texEnvModeSave=IntBuffer.allocate(1); \r
-       boolean lightingSave;\r
-       boolean depthTestSave;\r
-\r
-       // Prepare an orthographic projection, set camera position for 2D drawing, and save GL state.\r
-       ref_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
-           ref_gl.glTexEnvi(GL.GL_TEXTURE_ENV, GL.GL_TEXTURE_ENV_MODE, GL.GL_REPLACE);\r
-       }\r
-       lightingSave = ref_gl.glIsEnabled(GL.GL_LIGHTING);                      // Save enabled state of lighting.\r
-       if (lightingSave == true){\r
-           ref_gl.glDisable(GL.GL_LIGHTING);\r
-       }\r
-       depthTestSave = ref_gl.glIsEnabled(GL.GL_DEPTH_TEST);           // Save enabled state of depth test.\r
-       if (depthTestSave == true){\r
-           ref_gl.glDisable(GL.GL_DEPTH_TEST);\r
-       }\r
-       ref_gl.glMatrixMode(GL.GL_PROJECTION);\r
-       ref_gl.glPushMatrix();\r
-       ref_gl.glLoadIdentity();\r
-       glu.gluOrtho2D(0.0,0.0,cparam.getX(),cparam.getY());\r
-       ref_gl.glMatrixMode(GL.GL_MODELVIEW);\r
-       ref_gl.glPushMatrix();\r
-       ref_gl.glLoadIdentity();\r
-       ref_gl.glRotatef(0.0f,0.0f,180f,0f);\r
-       arglDispImageStateful(zoom);\r
-\r
-\r
-       // Restore previous projection, camera position, and GL state.\r
-        ref_gl.glMatrixMode(GL.GL_PROJECTION);\r
-        ref_gl.glPopMatrix();\r
-        ref_gl.glMatrixMode(GL.GL_MODELVIEW);\r
-        ref_gl.glPopMatrix();\r
-       if (depthTestSave){\r
-           ref_gl.glEnable(GL.GL_DEPTH_TEST);                  // Restore enabled state of depth test.\r
-       }\r
-       if (lightingSave){\r
-           ref_gl.glEnable(GL.GL_LIGHTING);                    // Restore enabled state of lighting.\r
-       }\r
-       if (texEnvModeSave.get(0) != GL.GL_REPLACE){\r
-           ref_gl.glTexEnvi(GL.GL_TEXTURE_ENV, GL.GL_TEXTURE_ENV_MODE, texEnvModeSave.get(0)); // Restore GL texture environment mode.\r
-       }\r
-       ref_gl.glEnd();\r
-    }\r
-    /**\r
-     * arglDispImageStateful関数モドキ\r
-     * @param image\r
-     * @param zoom\r
-     */\r
-    private void arglDispImageStateful(double zoom)\r
-    {\r
-       float zoomf;\r
-       IntBuffer params=IntBuffer.allocate(4);\r
-       zoomf = (float)zoom;\r
-        ref_gl.glDisable(GL.GL_TEXTURE_2D);\r
-        ref_gl.glGetIntegerv(GL.GL_VIEWPORT,params);\r
-        ref_gl.glPixelZoom(zoomf * ((float)(params.get(2)) / (float)width),-zoomf * ((float)(params.get(3)) / (float)height));\r
-        ref_gl.glRasterPos2i(-1,1);\r
-        ref_gl.glPixelStorei(GL.GL_UNPACK_ALIGNMENT, 1);\r
-        ByteBuffer buf=ByteBuffer.wrap(ref_buf);\r
-        ref_gl.glDrawPixels(width,height,gl_flag,GL.GL_UNSIGNED_BYTE,buf);\r
-    } \r
-}\r
@@ -2,10 +2,12 @@
  * simpleLiteと同じようなテストプログラム\r
  * マーカーの一致度の最低値をチェックするところを抜いたので、同じマーカーを大量に\r
  * 検出すると面白いことになります。\r
- * (c)2008 R.iizuka\r
+ * (c)2008 A虎@nyatla.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
@@ -21,9 +23,9 @@ import com.sun.opengl.util.Animator;
 \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
+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
@@ -31,12 +33,16 @@ public class JavaSimpleLite implements GLEventListener,JmfCaptureListener
     private final String CARCODE_FILE ="../../Data/patt.hiro";\r
     private final String PARAM_FILE   ="../../Data/camera_para.dat";\r
        \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 GL  gl;\r
+    private NyARGLUtil glnya;\r
+\r
+\r
     //NyARToolkit関係\r
     private GLNyARSingleDetectMarker nya;\r
     private GLNyARParam ar_param;\r
@@ -48,7 +54,7 @@ public class JavaSimpleLite implements GLEventListener,JmfCaptureListener
     {\r
        // Colour cube data.\r
        int polyList = 0;\r
-       float fSize = 0.5f;\r
+       float fSize = 0.5f;//マーカーサイズに対して0.5倍なので、4cmのナタデココ\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
@@ -111,8 +117,8 @@ public class JavaSimpleLite implements GLEventListener,JmfCaptureListener
 \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
+        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
@@ -127,9 +133,11 @@ public class JavaSimpleLite implements GLEventListener,JmfCaptureListener
             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
+            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用の支援クラス\r
+            glnya=new NyARGLUtil(gl,ar_param);\r
             //GL対応のRGBラスタオブジェクト\r
             cap_image=new GLNyARRaster_RGB(gl,ar_param);\r
             //キャプチャ開始\r
@@ -147,19 +155,15 @@ public class JavaSimpleLite implements GLEventListener,JmfCaptureListener
         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
         //視体積の設定\r
         gl.glMatrixMode(GL.GL_PROJECTION);\r
         gl.glLoadIdentity();\r
-        gl.glFrustum(-1.0f, 1.0f, -ratio, ratio,\r
-                    5.0f, 40.0f);\r
         //見る位置\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
@@ -175,10 +179,11 @@ public class JavaSimpleLite implements GLEventListener,JmfCaptureListener
             synchronized(cap_image){\r
                is_marker_exist=nya.detectMarkerLite(cap_image,100);\r
                //背景を書く\r
-               cap_image.glDispImage(1.0);\r
+               glnya.drawBackGround(cap_image, 1.0);\r
             }\r
             //あったら立方体を書く\r
             if(is_marker_exist){\r
+               //マーカーの一致度を調査するならば、ここでnya.getConfidence()で一致度を調べて下さい。\r
                 // Projection transformation.\r
                 gl.glMatrixMode(GL.GL_PROJECTION);\r
                 gl.glLoadMatrixd(ar_param.getCameraFrustumRH(),0);\r
@@ -1,10 +1,10 @@
 /**\r
  * NyARParamにOpenGL向け関数を追加したもの\r
- * (c)2008 R.iizuka\r
+ * (c)2008 A虎@nyatla.jp\r
  * airmail(at)ebony.plala.or.jp\r
  * http://nyatla.jp/\r
  */\r
-package jp.nyatla.nyartoolkit.gutil;\r
+package jp.nyatla.nyartoolkit.jogl.utils;\r
 \r
 import jp.nyatla.nyartoolkit.core.*;\r
 public class GLNyARParam extends NyARParam\r
diff --git a/sample/jogl/jp/nyatla/nyartoolkit/jogl/utils/GLNyARRaster_RGB.java b/sample/jogl/jp/nyatla/nyartoolkit/jogl/utils/GLNyARRaster_RGB.java
new file mode 100644 (file)
index 0000000..f7e585a
--- /dev/null
@@ -0,0 +1,76 @@
+/**\r
+ * NyARRaster_RGBにOpenGL用のデータ変換機能を追加したものです。\r
+ * \r
+ * (c)2008 A虎@nyatla.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データでフォーマットプロパティを初期化\r
+       initFormatProperty((RGBFormat)i_buffer.getFormat());\r
+       \r
+       byte[] src_buf=(byte[])i_buffer.getData();\r
+       //GL用のデータを準備\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のフラグ設定\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をgl_bufに差し替える\r
+       ref_buf=gl_buf;\r
+    }\r
+    /**\r
+     * GLでそのまま描画できるRGBバッファを返す。\r
+     * @return\r
+     */\r
+    public byte[] getGLRgbArray()\r
+    {\r
+       return this.ref_buf;\r
+    }\r
+    /**\r
+     * GL用のRGBバッファのバイト並びタイプを返す。\r
+     * @return\r
+     */\r
+    public int getGLPixelFlag()\r
+    {\r
+       return this.gl_flag;\r
+    }\r
+}\r
@@ -1,10 +1,10 @@
 /**\r
  * NyARSingleDetectMarkerにOpenGL向け関数を追加したもの\r
- * (c)2008 R.iizuka\r
+ * (c)2008 A虎@nyatla.jp\r
  * airmail(at)ebony.plala.or.jp\r
  * http://nyatla.jp/\r
  */\r
-package jp.nyatla.nyartoolkit.gutil;\r
+package jp.nyatla.nyartoolkit.jogl.utils;\r
 \r
 import jp.nyatla.nyartoolkit.NyARException;\r
 import jp.nyatla.nyartoolkit.core.NyARCode;\r
diff --git a/sample/jogl/jp/nyatla/nyartoolkit/jogl/utils/NyARGLUtil.java b/sample/jogl/jp/nyatla/nyartoolkit/jogl/utils/NyARGLUtil.java
new file mode 100644 (file)
index 0000000..e3b3623
--- /dev/null
@@ -0,0 +1,99 @@
+/**\r
+ * NyARToolkit用のJOGL支援関数群\r
+ * (c)2008 A虎@nyatla.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をバックグラウンドに書き出す。\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関数モドキ\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 0a947d8..9f067ab 100644 (file)
@@ -33,6 +33,7 @@
 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 @@ public class NyARCode{
        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のパターンファイルをロードする。\r
+     * ファイル形式はBGR形式で記録されたパターンファイルであること。\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
             //パターンデータはGBRAで並んでる。\r
             for(int h=0; h<4; h++ ) {\r
                 int l = 0;\r
index 9fd44b9..73a41cc 100644 (file)
@@ -72,17 +72,24 @@ public class NyARParam{
      */\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
index 72b99e6..98a9282 100644 (file)
@@ -49,7 +49,7 @@ interface ARMatchPatt{
     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 0712557..26f3d24 100644 (file)
@@ -47,7 +47,7 @@ public class NyARMatchPatt_BlackWhite implements ARMatchPatt{
     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 @@ public class NyARMatchPatt_BlackWhite implements ARMatchPatt{
         \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 2d60521..8f17c04 100644 (file)
@@ -54,7 +54,7 @@ public class NyARMatchPatt_Color_WITHOUT_PCA implements ARMatchPatt{
     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 @@ public class NyARMatchPatt_Color_WITHOUT_PCA implements ARMatchPatt{
         }\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 1fba3cc..17a38e7 100644 (file)
@@ -59,7 +59,7 @@ public class NyARMatchPatt_Color_WITH_PCA implements ARMatchPatt{
     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 @@ public class NyARMatchPatt_Color_WITH_PCA implements ARMatchPatt{
         }\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 23fe38a..a62e753 100644 (file)
@@ -91,7 +91,10 @@ public class NyARSingleDetectMarker{
        //パターンの評価オブジェクトを作る。\r
        NyARMatchPatt_Color_WITHOUT_PCA eva=new NyARMatchPatt_Color_WITHOUT_PCA();\r
        //パターンを評価器にセット\r
-       eva.setPatt(patt);\r
+       if(!eva.setPatt(patt)){\r
+           //計算に失敗した。\r
+           return false;\r
+       }\r
        //コードと比較する\r
        eva.evaluate(code);\r
        int square_index=0;\r