OSDN Git Service

[バックアップ]NyARToolkit
[nyartoolkit-and/nyartoolkit-and.git] / sample / jogl / jp / nyatla / nyartoolkit / jogl / sample / JavaSimpleLite2.java
index 04f3f39..9f65915 100644 (file)
@@ -1,32 +1,48 @@
-/**\r
- * simpleLiteの複数マーカー同時認識バージョン\r
- * "Hiro"のマーカーと"人"のマーカーの混在環境で、Hiroのマーカー全てに\r
- * 立方体を表示します。\r
- * (c)2008 A虎@nyatla.jp\r
+/* \r
+ * PROJECT: NyARToolkit JOGL sample program.\r
+ * --------------------------------------------------------------------------------\r
+ * The MIT License\r
+ * Copyright (c) 2008 nyatla\r
  * airmail(at)ebony.plala.or.jp\r
- * http://nyatla.jp/\r
+ * http://nyatla.jp/nyartoolkit/\r
+ * \r
+ * Permission is hereby granted, free of charge, to any person obtaining a copy\r
+ * of this software and associated documentation files (the "Software"), to deal\r
+ * in the Software without restriction, including without limitation the rights\r
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r
+ * copies of the Software, and to permit persons to whom the Software is\r
+ * furnished to do so, subject to the following conditions:\r
+ * The above copyright notice and this permission notice shall be included in\r
+ * all copies or substantial portions of the Software.\r
+ * \r
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r
+ * THE SOFTWARE.\r
+ * \r
  */\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.event.*;\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 javax.media.*;\r
+import javax.media.opengl.*;\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.core.param.*;\r
+import jp.nyatla.nyartoolkit.core.transmat.NyARTransMatResult;\r
+import jp.nyatla.nyartoolkit.core.*;\r
+import jp.nyatla.nyartoolkit.detector.*;\r
+import jp.nyatla.nyartoolkit.jmf.utils.*;\r
 import jp.nyatla.nyartoolkit.jogl.utils.*;\r
-\r
+/**\r
+ * simpleLiteの複数マーカー同時認識バージョン\r
+ * "Hiro"のマーカーと"人"のマーカーの混在環境で、Hiroのマーカー全てに\r
+ * 立方体を表示します。\r
+ */\r
 public class JavaSimpleLite2 implements GLEventListener, JmfCaptureListener\r
 {\r
        private final String CARCODE_FILE1 = "../../Data/patt.hiro";\r
@@ -50,10 +66,10 @@ public class JavaSimpleLite2 implements GLEventListener, JmfCaptureListener
        private NyARGLUtil _glnya;\r
 \r
        //NyARToolkit関係\r
-       private GLNyARDetectMarker _nya;\r
-\r
-       private GLNyARParam _ar_param;\r
+       private NyARDetectMarker _nya;\r
 \r
+       private NyARParam _ar_param;\r
+       private double[] _camera_projection=new double[16];\r
        /**\r
         * 立方体を書く\r
         *\r
@@ -62,7 +78,7 @@ public class JavaSimpleLite2 implements GLEventListener, JmfCaptureListener
        {\r
                // Colour cube data.\r
                int polyList = 0;\r
-               float fSize = 0.5f;//マーカーサイズに対して0.5倍なので、4cmのナタデココ\r
+               float fSize = 0.5f;//マーカーサイズに対して0.5倍なので、4cmの立方体\r
                int f, i;\r
                float[][] cube_vertices = new float[][] { { 1.0f, 1.0f, 1.0f }, { 1.0f, -1.0f, 1.0f }, { -1.0f, -1.0f, 1.0f }, { -1.0f, 1.0f, 1.0f }, { 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
                float[][] cube_vertex_colors = new float[][] { { 1.0f, 1.0f, 1.0f }, { 1.0f, 1.0f, 0.0f }, { 0.0f, 1.0f, 0.0f }, { 0.0f, 1.0f, 1.0f }, { 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
@@ -129,21 +145,21 @@ public class JavaSimpleLite2 implements GLEventListener, JmfCaptureListener
                        _capture = new JmfCameraCapture(SCREEN_X, SCREEN_Y, 15f, JmfCameraCapture.PIXEL_FORMAT_RGB);\r
                        _capture.setCaptureListener(this);\r
                        //NyARToolkitの準備\r
-                       _ar_param = new GLNyARParam();\r
-                       _ar_param.loadFromARFile(PARAM_FILE);\r
-                       _ar_param.changeSize(SCREEN_X, SCREEN_Y);\r
+                       _ar_param = new NyARParam();\r
+                       _ar_param.loadARParamFromFile(PARAM_FILE);\r
+                       _ar_param.changeScreenSize(SCREEN_X, SCREEN_Y);\r
 \r
                        //ARコードを2個ロード\r
                        double[] width = new double[] { 80.0, 80.0 };\r
                        NyARCode[] ar_codes = new NyARCode[2];\r
                        ar_codes[0] = new NyARCode(16, 16);\r
-                       ar_codes[0].loadFromARFile(CARCODE_FILE1);\r
+                       ar_codes[0].loadARPattFromFile(CARCODE_FILE1);\r
                        ar_codes[1] = new NyARCode(16, 16);\r
-                       ar_codes[1].loadFromARFile(CARCODE_FILE2);\r
-                       _nya = new GLNyARDetectMarker(_ar_param, ar_codes, width, 2);\r
+                       ar_codes[1].loadARPattFromFile(CARCODE_FILE2);\r
+                       _nya = new NyARDetectMarker(_ar_param, ar_codes, width, 2);\r
                        _nya.setContinueMode(false);//ここをtrueにすると、transMatContinueモード(History計算)になります。\r
                        //NyARToolkit用の支援クラス\r
-                       _glnya = new NyARGLUtil(_gl, _ar_param);\r
+                       _glnya = new NyARGLUtil(_gl);\r
                        //GL対応のRGBラスタオブジェクト\r
                        _cap_image = new GLNyARRaster_RGB(_ar_param);\r
                        //キャプチャ開始\r
@@ -151,8 +167,10 @@ public class JavaSimpleLite2 implements GLEventListener, JmfCaptureListener
                } catch (Exception e) {\r
                        e.printStackTrace();\r
                }\r
+               //カメラパラメータの計算\r
+               _glnya.toCameraFrustumRH(_ar_param,_camera_projection);\r
+               \r
                _animator = new Animator(drawable);\r
-\r
                _animator.start();\r
 \r
        }\r
@@ -169,9 +187,12 @@ public class JavaSimpleLite2 implements GLEventListener, JmfCaptureListener
                _gl.glMatrixMode(GL.GL_MODELVIEW);\r
                _gl.glLoadIdentity();\r
        }\r
-\r
+       private NyARTransMatResult __display_transmat_result=new NyARTransMatResult();\r
+       private double[] __display_wk=new double[16];\r
+       \r
        public void display(GLAutoDrawable drawable)\r
        {\r
+               NyARTransMatResult transmat_result=__display_transmat_result;\r
 \r
                try {\r
                        if (!_cap_image.hasData()) {\r
@@ -186,7 +207,6 @@ public class JavaSimpleLite2 implements GLEventListener, JmfCaptureListener
                                _glnya.drawBackGround(_cap_image, 1.0);\r
                        }\r
                        //あったら立方体を書く\r
-                       double[] matrix = new double[16];\r
                        for (int i = 0; i < found_markers; i++) {\r
                                //1番のマーカーでなければ表示しない。\r
                                if (_nya.getARCodeIndex(i) != 0) {\r
@@ -195,12 +215,15 @@ public class JavaSimpleLite2 implements GLEventListener, JmfCaptureListener
                                //マーカーの一致度を調査するならば、ここでnya.getConfidence()で一致度を調べて下さい。\r
                                // Projection transformation.\r
                                _gl.glMatrixMode(GL.GL_PROJECTION);\r
-                               _gl.glLoadMatrixd(_ar_param.getCameraFrustumRH(), 0);\r
+                               _gl.glLoadMatrixd(_camera_projection, 0);\r
                                _gl.glMatrixMode(GL.GL_MODELVIEW);\r
                                // Viewing transformation.\r
                                _gl.glLoadIdentity();\r
-                               _nya.getCameraViewRH(i, matrix);\r
-                               _gl.glLoadMatrixd(matrix, 0);\r
+                               //変換行列を取得\r
+                               _nya.getTransmationMatrix(i,transmat_result);\r
+                               //変換行列をOpenGL形式に変換\r
+                               _glnya.toCameraViewRH(transmat_result, __display_wk);\r
+                               _gl.glLoadMatrixd(__display_wk, 0);\r
 \r
                                // All other lighting and geometry goes here.\r
                                drawCube();\r
@@ -209,6 +232,7 @@ public class JavaSimpleLite2 implements GLEventListener, JmfCaptureListener
                } catch (Exception e) {\r
                        e.printStackTrace();\r
                }\r
+               return;\r
        }\r
 \r
        public void onUpdateBuffer(Buffer i_buffer)\r