Beispiel #1
0
        /**
         * このターゲットについて、非同期に認識依頼を出します。このプログラムはサンプルなので、別スレッドでIDマーカ判定をして、
         * 三秒後に適当なサイズとDirectionを返却するだけです。
         * @param i_target
         * @return
         * @throws NyARException
         */
        public void requestAsyncMarkerDetect(NyARReality i_reality, NyARRealitySource i_source, NyARRealityTarget i_target)
        {
            //ターゲットから画像データなどを取得するときは、スレッドからではなく、ここで同期して取得してコピーしてからスレッドに引き渡します。

            //100x100の領域を切りだして、Rasterを作る。
            NyARRgbRaster raster = new NyARRgbRaster(100, 100, NyARBufferType.INT1D_X8R8G8B8_32);

            i_reality.getRgbPatt2d(i_source, i_target.refTargetVertex(), 1, raster);
            //コピーしたラスタとターゲットのIDをスレッドへ引き渡す。
            Thread t = new Thread(new AsyncThread(this, i_target.getSerialId(), raster).run);

            t.Start();
            return;
        }
Beispiel #2
0
	    public void Test()
	    {

		    try {
			    NyARParam param=NyARParam.createFromARParamFile(new StreamReader(PARAM_FILE));
			    param.changeScreenSize(320,240);
			    NyARReality reality=new NyARReality(param.getScreenSize(),10,1000,param.getPerspectiveProjectionMatrix(),null,10,10);
			    NyARRealitySource reality_in=new NyARRealitySource_Reference(320,240,null,2,100,NyARBufferType.BYTE1D_B8G8R8X8_32);

                //試験イメージの読み出し(320x240 BGRAのRAWデータ)
                StreamReader sr = new StreamReader(DATA_FILE);
                BinaryReader bs = new BinaryReader(sr.BaseStream);
                byte[] raw = bs.ReadBytes(320 * 240 * 4);
                Array.Copy(raw, (byte[])reality_in.refRgbSource().getBuffer(), raw.Length);
                
                
                Stopwatch sw = new Stopwatch();
                sw.Start();
			    for(int i=0;i<1000;i++){
				    reality.progress(reality_in);
			    }
                sw.Stop();
                Console.WriteLine(sw.ElapsedMilliseconds + "[ms]");    			
			    Console.WriteLine(reality.getNumberOfKnown());
			    Console.WriteLine(reality.getNumberOfUnknown());
			    Console.WriteLine(reality.getNumberOfDead());
                NyARRealityTarget[] rt = new NyARRealityTarget[10];
			    reality.selectUnKnownTargets(rt);
			    reality.changeTargetToKnown(rt[0],2,80);
			    Console.WriteLine(rt[0]._transform_matrix.m00+","+rt[0]._transform_matrix.m01+","+rt[0]._transform_matrix.m02+","+rt[0]._transform_matrix.m03);
			    Console.WriteLine(rt[0]._transform_matrix.m10+","+rt[0]._transform_matrix.m11+","+rt[0]._transform_matrix.m12+","+rt[0]._transform_matrix.m13);
			    Console.WriteLine(rt[0]._transform_matrix.m20+","+rt[0]._transform_matrix.m21+","+rt[0]._transform_matrix.m22+","+rt[0]._transform_matrix.m23);
			    Console.WriteLine(rt[0]._transform_matrix.m30+","+rt[0]._transform_matrix.m31+","+rt[0]._transform_matrix.m32+","+rt[0]._transform_matrix.m33);
		    } catch (Exception e) {
			   Console.WriteLine(e.StackTrace);
		    }
            return;
	    }
        /**
         * このターゲットについて、非同期に認識依頼を出します。このプログラムはサンプルなので、別スレッドでIDマーカ判定をして、
         * 三秒後に適当なサイズとDirectionを返却するだけです。
         * @param i_target
         * @return
         * @throws NyARException
         */
        public void requestAsyncMarkerDetect(NyARReality i_reality,NyARRealitySource i_source,NyARRealityTarget i_target)
        {
            //ターゲットから画像データなどを取得するときは、スレッドからではなく、ここで同期して取得してコピーしてからスレッドに引き渡します。

            //100x100の領域を切りだして、Rasterを作る。
            NyARRgbRaster raster=new NyARRgbRaster(100,100,NyARBufferType.INT1D_X8R8G8B8_32);
            i_reality.getRgbPatt2d(i_source, i_target.refTargetVertex(),1, raster);
            //コピーしたラスタとターゲットのIDをスレッドへ引き渡す。
            Thread t=new Thread(new AsyncThread(this,i_target.getSerialId(),raster).run);
            t.Start();
            return;
        }