Develop and Download Open Source Software

View 1.1.1-20080503.0 - Change Log

category(Tag) tree

file info

category(Tag)
root
file name
NyARToolkit-core_1.1.1-20080503.0_-_Changes
last update
2008-05-08 09:08
type
Plain Text
editor
nyatla
description
1.1.1-20080503.0 - Change Log
language
English
translate
Index: sample/jogl/jp/nyatla/nyartoolkit/jogl/sample/JavaSimpleLite.java
===================================================================
--- sample/jogl/jp/nyatla/nyartoolkit/jogl/sample/JavaSimpleLite.java	(revision 194)
+++ sample/jogl/jp/nyatla/nyartoolkit/jogl/sample/JavaSimpleLite.java	(revision 196)
@@ -127,7 +127,7 @@
         //NyARToolkitの準備
         try{
             //キャプチャの準備
-            capture=new JmfCameraCapture(320,240,15f,JmfCameraCapture.PIXEL_FORMAT_RGB);
+            capture=new JmfCameraCapture(SCREEN_X,SCREEN_Y,15f,JmfCameraCapture.PIXEL_FORMAT_RGB);
             capture.setCaptureListener(this);
             //NyARToolkitの準備
             ar_param=new GLNyARParam();
Index: src/jp/nyatla/nyartoolkit/core/NyARColorPatt_O3.java
===================================================================
--- src/jp/nyatla/nyartoolkit/core/NyARColorPatt_O3.java	(revision 194)
+++ src/jp/nyatla/nyartoolkit/core/NyARColorPatt_O3.java	(revision 196)
@@ -232,6 +232,7 @@
     private int[] wk_updateExtpat_x_rgb_index;
     private int[] wk_updateExtpat_y_rgb_index;
     private int[] wk_updateExtpat_i_rgb_index;
+    private int wk_updateExtpat_buffer_size=0;
 
     /**
      * ワークバッファを予約する
@@ -239,27 +240,17 @@
      */
     private void reservWorkBuffers(int i_xdiv2)
     {
-	int[] buf=this.wk_updateExtpat_rgb_buf;
-	if(this.wk_updateExtpat_rgb_buf==null){
-	    wk_updateExtpat_para00_xw=new double[i_xdiv2];
-	    wk_updateExtpat_para10_xw=new double[i_xdiv2];
-	    wk_updateExtpat_para20_xw=new double[i_xdiv2];
-	    wk_updateExtpat_rgb_buf=new int[i_xdiv2*3];
-	    wk_updateExtpat_x_rgb_index=new int[i_xdiv2];
-	    wk_updateExtpat_y_rgb_index=new int[i_xdiv2];
-	    wk_updateExtpat_i_rgb_index=new int[i_xdiv2];
-	}else{
-	    if(buf.length<i_xdiv2){
-		wk_updateExtpat_para00_xw=new double[i_xdiv2];
-		wk_updateExtpat_para10_xw=new double[i_xdiv2];
-		wk_updateExtpat_para20_xw=new double[i_xdiv2];
-		wk_updateExtpat_rgb_buf=new int[i_xdiv2*3];
-		wk_updateExtpat_x_rgb_index=new int[i_xdiv2];
-		wk_updateExtpat_y_rgb_index=new int[i_xdiv2];
-		wk_updateExtpat_i_rgb_index=new int[i_xdiv2];
-	    }
-	    //十分なら何もしない。
-	}
+        if(this.wk_updateExtpat_buffer_size<i_xdiv2){
+            wk_updateExtpat_para00_xw=new double[i_xdiv2];
+            wk_updateExtpat_para10_xw=new double[i_xdiv2];
+            wk_updateExtpat_para20_xw=new double[i_xdiv2];
+            wk_updateExtpat_rgb_buf=new int[i_xdiv2*3];
+            wk_updateExtpat_x_rgb_index=new int[i_xdiv2];
+            wk_updateExtpat_y_rgb_index=new int[i_xdiv2];
+            wk_updateExtpat_i_rgb_index=new int[i_xdiv2];
+            this.wk_updateExtpat_buffer_size=i_xdiv2;
+        }
+	//十分なら何もしない。
 	return;
     }
     
Index: src/jp/nyatla/nyartoolkit/core/NyARDetectMarker.java
===================================================================
--- src/jp/nyatla/nyartoolkit/core/NyARDetectMarker.java	(revision 194)
+++ src/jp/nyatla/nyartoolkit/core/NyARDetectMarker.java	(revision 196)
@@ -81,7 +81,7 @@
      * detectMarker関数から使う関数です。o_markerにlabelとclipで示される1個のマーカーを格納します。
      * marker_holder[i_holder_num]にオブジェクトが無ければまず新規に作成し、もし
      * 既に存在すればそこにマーカー情報を上書きして記録します。
-     * Optimize:STEP[591->543]
+     * Optimize:STEP[369->336]
      * @param o_marker
      * @param limage
      * @param label_ref
@@ -132,10 +132,16 @@
 	dir = 5;
 	
 	int r,c;
-
+        c=xcoord[0];
+        r=ycoord[0];
+        dmax=0;
+        //本家はdmaxの作成とxcoordの作成を別のループでやってるけど、非効率なので統合
 	for(;;){
-	    r=ycoord[coord_num-1];
-	    c=xcoord[coord_num-1];
+	    //xcoord[1]-xcoord[n]までのデータを作る。
+	    
+//	    1個前のxcoordとycoordはループ後半で格納される。
+//	    c=xcoord[coord_num-1];
+//	    r=ycoord[coord_num-1];
 	    //p1 = &(limage[marker_info2->y_coord[marker_info2->coord_num-1] * xsize+ marker_info2->x_coord[marker_info2->coord_num-1]]);
 	    dir = (dir+5)%8;
 	    for(i=0;i<8;i++) {
@@ -148,47 +154,39 @@
 		System.out.println("??? 2");//printf("??? 2\n");
 		throw new NyARException();//return(-1);
 	    }
-	    xcoord[coord_num]= xcoord[coord_num-1] + xdir[dir];//marker_info2->x_coord[marker_info2->coord_num]= marker_info2->x_coord[marker_info2->coord_num-1] + xdir[dir];
-	    ycoord[coord_num]= ycoord[coord_num-1] + ydir[dir];//marker_info2->y_coord[marker_info2->coord_num]= marker_info2->y_coord[marker_info2->coord_num-1] + ydir[dir];
-	    if(xcoord[coord_num] == sx && ycoord[coord_num] == sy ){
+//	    xcoordとycoordをc,rにも保存
+	    c= c + xdir[dir];//marker_info2->x_coord[marker_info2->coord_num]= marker_info2->x_coord[marker_info2->coord_num-1] + xdir[dir];
+	    r= r + ydir[dir];//marker_info2->y_coord[marker_info2->coord_num]= marker_info2->y_coord[marker_info2->coord_num-1] + ydir[dir];
+	    xcoord[coord_num]=c;//marker_info2->x_coord[marker_info2->coord_num]= marker_info2->x_coord[marker_info2->coord_num-1] + xdir[dir];
+	    ycoord[coord_num]=r;//marker_info2->y_coord[marker_info2->coord_num]= marker_info2->y_coord[marker_info2->coord_num-1] + ydir[dir];
+	    if(c == sx && r == sy ){
 		break;
 	    }
+	    //dmaxの計算
+	    d=(c-sx)*(c-sx)+(r-sy)*(r-sy);
+	    if( d > dmax ) {
+		dmax = d;
+		v1 = coord_num;
+	    }
+	    //終了条件判定
 	    coord_num++;
-	    if(coord_num == xcoord.length-1){//if( marker_info2.coord_num == Config.AR_CHAIN_MAX-1 ){
+	    if(coord_num == AR_CHAIN_MAX-1){//if( marker_info2.coord_num == Config.AR_CHAIN_MAX-1 ){
 		System.out.println("??? 3");//printf("??? 3\n");
 		throw new NyARException();//return(-1);
 	    }
 	}
-
-	dmax = 0;
-	for(i=1;i<coord_num;i++) {//	for(i=1;i<marker_info2->coord_num;i++) {
-	    d = (xcoord[i]-sx)*(xcoord[i]-sx)+ (ycoord[i]-sy)*(ycoord[i]-sy);//	  d = (marker_info2->x_coord[i]-sx)*(marker_info2->x_coord[i]-sx)+ (marker_info2->y_coord[i]-sy)*(marker_info2->y_coord[i]-sy);
-	    if( d > dmax ) {
-		dmax = d;
-		v1 = i;
-	    }
-	}
+//
+//	dmax = 0;
+//	for(i=1;i<coord_num;i++) {//	for(i=1;i<marker_info2->coord_num;i++) {
+//	    d = (xcoord[i]-sx)*(xcoord[i]-sx)+ (ycoord[i]-sy)*(ycoord[i]-sy);//	  d = (marker_info2->x_coord[i]-sx)*(marker_info2->x_coord[i]-sx)+ (marker_info2->y_coord[i]-sy)*(marker_info2->y_coord[i]-sy);
+//	    if( d > dmax ) {
+//		dmax = d;
+//		v1 = i;
+//	    }
+//	}
 	//NyARMarkerへcoord情報をセット
 	//coordの並び替えと保存はNyARMarkerへ移動
 	o_marker.setCoordXY(v1,coord_num,xcoord,ycoord);
-
-//	int[]      wx=new int[v1];//new int[Config.AR_CHAIN_MAX];
-//	int[]      wy=new int[v1]; //new int[Config.AR_CHAIN_MAX];   
-//	for(i=0;i<v1;i++) {
-//	    wx[i] = marker_ref.x_coord[i];//wx[i] = marker_info2->x_coord[i];
-//	    wy[i] = marker_ref.y_coord[i];//wy[i] = marker_info2->y_coord[i];
-//	}
-//	for(i=0;i<marker_ref.coord_num-v1;i++) {//for(i=v1;i<marker_info2->coord_num;i++) {
-//	    marker_ref.x_coord[i] = marker_ref.x_coord[i+v1];//marker_info2->x_coord[i-v1] = marker_info2->x_coord[i];
-//	    marker_ref.y_coord[i] = marker_ref.y_coord[i+v1];//marker_info2->y_coord[i-v1] = marker_info2->y_coord[i];
-//	}
-//	for(i=0;i<v1;i++) {
-//	    marker_ref.x_coord[i-v1+marker_ref.coord_num] = wx[i];//marker_info2->x_coord[i-v1+marker_info2->coord_num] = wx[i];
-//	    marker_ref.y_coord[i-v1+marker_ref.coord_num] = wy[i];//marker_info2->y_coord[i-v1+marker_info2->coord_num] = wy[i];
-//	}
-//	marker_ref.x_coord[marker_ref.coord_num] = marker_ref.x_coord[0];//marker_info2->x_coord[marker_info2->coord_num] = marker_info2->x_coord[0];
-//	marker_ref.y_coord[marker_ref.coord_num] = marker_ref.y_coord[0];//marker_info2->y_coord[marker_info2->coord_num] = marker_info2->y_coord[0];
-//	marker_ref.coord_num++;//marker_info2->coord_num++;
 	return;
     }
 
@@ -208,8 +206,9 @@
      */
     public final void detectMarker(NyARLabeling i_labeling,double i_factor,NyARMarkerList o_marker_list) throws NyARException
     {
+	int label_area;
 	int i;
-	int               xsize, ysize;
+	int xsize, ysize;
 	NyARLabel[] labels=i_labeling.getLabel();
 //	int[] warea  	=i_labeling.getArea();
 	int label_num	=i_labeling.getLabelNum();
@@ -228,7 +227,8 @@
 	NyARLabel label_pt;
 	for(i=0; i<label_num; i++ ){
 	    label_pt=labels[i];
-	    if( label_pt.area < AR_AREA_MIN || label_pt.area > AR_AREA_MAX ){
+	    label_area=label_pt.area;
+	    if(label_area < AR_AREA_MIN || label_area > AR_AREA_MAX ){
 		continue;
 	    }
 	    if( label_pt.clip0 == 1 || label_pt.clip1 == xsize-2 ){//if( wclip[i*4+0] == 1 || wclip[i*4+1] == xsize-2 ){
@@ -240,7 +240,7 @@
 	    //ret = arGetContour( limage, label_ref, i+1,&(wclip[i*4]), &(marker_info2[marker_num2]));
 	    arGetContour(current_marker,limage, label_ref, i+1,label_pt);
 
-	    if(!current_marker.checkSquare(label_pt.area,i_factor,label_pt.pos_x,label_pt.pos_y)){
+	    if(!current_marker.checkSquare(label_area,i_factor,label_pt.pos_x,label_pt.pos_y)){
 		//後半で整理するからここはいらない。//        	marker_holder[marker_num2]=null;
 		continue;
 	    }
Index: src/jp/nyatla/nyartoolkit/core/NyARTransRot.java
===================================================================
--- src/jp/nyatla/nyartoolkit/core/NyARTransRot.java	(revision 194)
+++ src/jp/nyatla/nyartoolkit/core/NyARTransRot.java	(revision 196)
@@ -1093,9 +1093,13 @@
 	d_pt=pos2d[2];P2D20=d_pt[0];P2D21=d_pt[1];
 	d_pt=pos2d[3];P2D30=d_pt[0];P2D31=d_pt[1];
 	final double cpara[]=cparam.get34Array();
-	combo03 = cpara[0] * trans[0]+ cpara[1] * trans[1]+ cpara[2] * trans[2]+ cpara[3];
-	combo13 = cpara[4] * trans[0]+ cpara[5] * trans[1]+ cpara[6] * trans[2]+ cpara[7];
-	combo23 = cpara[8] * trans[0]+ cpara[9] * trans[1]+ cpara[10] * trans[2]+ cpara[11];
+	final double CP0,CP1,CP2,CP3,CP4,CP5,CP6,CP7,CP8,CP9,CP10;
+	CP0=cpara[0];CP1=cpara[1];CP2=cpara[2];CP3=cpara[3];
+	CP4=cpara[4];CP5=cpara[5];CP6=cpara[6];CP7=cpara[7];
+	CP8=cpara[8];CP9=cpara[9];CP10=cpara[10];
+	combo03 = CP0 * trans[0]+ CP1 * trans[1]+ CP2 * trans[2]+ CP3;
+	combo13 = CP4 * trans[0]+ CP5 * trans[1]+ CP6 * trans[2]+ CP7;
+	combo23 = CP8 * trans[0]+ CP9 * trans[1]+ CP10 * trans[2]+ cpara[11];
 	double CACA,SASA,SACA,CA,SA;
 	double CACACB,SACACB,SASACB,CASB,SASB;
 	double SACASC,SACACBSC,SACACBCC,SACACC;        
@@ -1151,9 +1155,9 @@
 		    CASB=CA*wsin;
 		    SASB=SA*wsin;
 		    //comboの計算1
-		    combo02 = cpara[0] * CASB+ cpara[1] * SASB+ cpara[2] * wcos;
-		    combo12 = cpara[4] * CASB+ cpara[5] * SASB+ cpara[6] * wcos;
-		    combo22 = cpara[8] * CASB+ cpara[9] * SASB+ cpara[10] * wcos;
+		    combo02 = CP0 * CASB+ CP1 * SASB+ CP2 * wcos;
+		    combo12 = CP4 * CASB+ CP5 * SASB+ CP6 * wcos;
+		    combo22 = CP8 * CASB+ CP9 * SASB+ CP10 * wcos;
 
 		    combo02_2 =combo02 * VX02 + combo03;
 		    combo02_5 =combo02 * VX12 + combo03;
@@ -1179,16 +1183,16 @@
 			rot3 = SACACBCC-SACACC+SASACB*wsin+CACA*wsin;
 			rot6 = -CASB*wcos-SASB*wsin;
 
-			combo00 = cpara[0] * rot0+ cpara[1] * rot3+ cpara[2] * rot6;
-			combo10 = cpara[4] * rot0+ cpara[5] * rot3+ cpara[6] * rot6;
-			combo20 = cpara[8] * rot0+ cpara[9] * rot3+ cpara[10] * rot6;
+			combo00 = CP0 * rot0+ CP1 * rot3+ CP2 * rot6;
+			combo10 = CP4 * rot0+ CP5 * rot3+ CP6 * rot6;
+			combo20 = CP8 * rot0+ CP9 * rot3+ CP10 * rot6;
 
 			rot1 = -CACACB*wsin-SASA*wsin+SACACBCC-SACACC;
 			rot4 = -SACACBSC+SACASC+SASACB*wcos+CACA*wcos;
 			rot7 = CASB*wsin-SASB*wcos;
-			combo01 = cpara[0] * rot1+ cpara[1] * rot4+ cpara[2] * rot7;
-			combo11 = cpara[4] * rot1+ cpara[5] * rot4+ cpara[6] * rot7;
-			combo21 = cpara[8] * rot1+ cpara[9] * rot4+ cpara[10] * rot7;
+			combo01 = CP0 * rot1+ CP1 * rot4+ CP2 * rot7;
+			combo11 = CP4 * rot1+ CP5 * rot4+ CP6 * rot7;
+			combo21 = CP8 * rot1+ CP9 * rot4+ CP10 * rot7;
 			//
 			err = 0.0;
 			h  = combo20 * VX00+ combo21 * VX01+ combo22_2;
Index: src/jp/nyatla/nyartoolkit/core/NyARMarker.java
===================================================================
--- src/jp/nyatla/nyartoolkit/core/NyARMarker.java	(revision 194)
+++ src/jp/nyatla/nyartoolkit/core/NyARMarker.java	(revision 196)
@@ -116,7 +116,7 @@
     /**
      * static int arDetectMarker2_check_square( int area, ARMarkerInfo2 *marker_info2, double factor )
      * 関数の代替関数
-     * OPTIMIZED STEP [450->397]
+     * OPTIMIZED STEP [450->415]
      * @param i_area
      * @param i_factor
      * @return
@@ -128,33 +128,33 @@
 	final int[] l_y_coord=y_coord;
 	final NyARVertexCounter wv1=wk_checkSquare_wv1;
 	final NyARVertexCounter wv2=wk_checkSquare_wv2;
-	int             sx, sy;
-	int             dmax, d, v1;
+	int             sx,sy;
+	int             dmax,d,v1;
 	
 	int v2;//	    int   wvnum1,wvnum2,v2;
-	double          thresh;
-	int             i;
+	int i;
 	
+	final int L_coord_num_m1=this.coord_num-1;
 	dmax = 0;
 	v1 = 0;
 	sx = l_x_coord[0];//sx = marker_info2->x_coord[0];
 	sy = l_y_coord[0];//sy = marker_info2->y_coord[0];
-	for(i=1;i<this.coord_num-1;i++){//for(i=1;i<marker_info2->coord_num-1;i++) {
-	    d = (l_x_coord[i]-sx)*(l_x_coord[i]-sx)+ (l_y_coord[i]-sy)*(l_y_coord[i]-sy);
+	for(i=1;i<L_coord_num_m1;i++){//for(i=1;i<marker_info2->coord_num-1;i++) {
+            d = (l_x_coord[i]-sx)*(l_x_coord[i]-sx)+ (l_y_coord[i]-sy)*(l_y_coord[i]-sy);
 	    if( d > dmax ) {
 		dmax = d;
 		v1 = i;
 	    }
 	}
 
-	thresh = (i_area/0.75) * 0.01 * i_factor;
+	final double thresh = (i_area/0.75) * 0.01 * i_factor;
 
 	l_vertex[0] = 0;
 
 	if(!wv1.getVertex(l_x_coord,l_y_coord, 0,  v1,thresh)){	    //if( get_vertex(marker_info2->x_coord, marker_info2->y_coord, 0,  v1,thresh, wv1, &wvnum1) < 0 ) {
 	    return false;
 	}
-	if(!wv2.getVertex(l_x_coord,l_y_coord,v1,  this.coord_num-1, thresh)) {//if(get_vertex(marker_info2->x_coord, marker_info2->y_coord,v1,  marker_info2->coord_num-1, thresh, wv2, &wvnum2) < 0 ) {
+	if(!wv2.getVertex(l_x_coord,l_y_coord,v1,L_coord_num_m1, thresh)) {//if(get_vertex(marker_info2->x_coord, marker_info2->y_coord,v1,  marker_info2->coord_num-1, thresh, wv2, &wvnum2) < 0 ) {
 	    return false;
 	}
 
@@ -183,7 +183,7 @@
 	    if(!wv1.getVertex(l_x_coord,l_y_coord,v1, v2, thresh)) {
 		return false;
 	    }
-	    if(!wv2.getVertex(l_x_coord,l_y_coord,v2, this.coord_num-1, thresh)) {
+	    if(!wv2.getVertex(l_x_coord,l_y_coord,v2,L_coord_num_m1, thresh)) {
 		return false;
 	    }
 	    if( wv1.number_of_vertex==1 && wv2.number_of_vertex==1 ) {
@@ -198,7 +198,7 @@
 	else {
 	    return false;
 	}
-	l_vertex[4] = this.coord_num-1;//この値使ってるの?
+	l_vertex[4] =L_coord_num_m1;//この値使ってるの?
 	//
 	area   = i_area;
 	pos[0] = i_pos_x;
@@ -209,6 +209,7 @@
 }
 
 
+
 /**
  * get_vertex関数を切り離すためのクラス
  *
SourceForge.JP is a Japanese version of SourceForge.net. For developments that are not related to Japan, we recommend you to use SourceForge.net.