Beispiel #1
0
//==================
// マーカー検出処理
//==================
bool cARTK::update( void )
{
	ARUint8			*pImage;
	ARMarkerInfo	*pMarkerInfo;
    int             iNumDetectedMarker;

	// カメラ画像の取得
	if( (pImage = arVideoGetImage()) != NULL )
	{
		m_pARTImage = pImage;
		m_bMarkersFound = false;

		// カメラ画像からマーカーを検出
		if( arDetectMarker( m_pARTImage, m_iThreshold, &pMarkerInfo, &iNumDetectedMarker ) < 0 )
		{
			exit( -1 );
		}

		// 検出されたマーカー情報の中から一番信頼性の高いものを探す
		for( int i = 0 ; i < ARMK_MAXNUM ; i++ )
		{
			int		k = -1;
			for( int j = 0 ; j < iNumDetectedMarker ; j++ )
			{
				if( pMarkerInfo[j].id == m_sMarkerInfo[i].iPattID )
				{
					if( k == -1 || pMarkerInfo[j].cf > pMarkerInfo[k].cf )	k = j;
				}
			}

			if( k != -1 )
			{
				// カメラのトランスフォーム行列を取得
				if( !m_sMarkerInfo[i].bVisible )
					nyar_NyARTransMat_O2_transMat( m_pNyARInst, &(pMarkerInfo[k]), m_sMarkerInfo[i].dCenterPos, m_sMarkerInfo[i].dWidth, m_sMarkerInfo[i].dTransMat );
				else
					nyar_NyARTransMat_O2_transMatCont( m_pNyARInst, &(pMarkerInfo[k]), m_sMarkerInfo[i].dTransMat, m_sMarkerInfo[i].dCenterPos, m_sMarkerInfo[i].dWidth, m_sMarkerInfo[i].dTransMat );

				m_sMarkerInfo[i].bVisible = true;
				m_bMarkersFound = true;
			}
			else
			{
				m_sMarkerInfo[i].bVisible = false;
			}
		}

		return true;
	}

	arUtilSleep( 2 );

	return false;
}
Beispiel #2
0
void MainLoop()
{
    //QueryPerformanceFrequency(&nFreq);
    //QueryPerformanceCounter(&nBefore);
    
    DWORD StartTime,EndTime,PassTime;
    double l_StartTime,l_EndTime,l_PassTime;
#ifdef _WIN32
    StartTime=timeGetTime();
#else
    l_StartTime=gettimeofday_sec();
#endif
    ARUint8		*image;
    ARMarkerInfo	*marker_info;
    int			 marker_num;
    int			 j,k;

    if( (image = (ARUint8*)arVideoGetImage() )==NULL){
	arUtilSleep(2);
	return;
    }

    argDrawMode2D();
    argDispImage(image, 0, 0);


    if(arDetectMarker(image, thresh, &marker_info, &marker_num) < 0){
	CleanUp();
	exit(0);
    }
    arVideoCapNext();

    k=-1;
    for(j=0;j<marker_num;j++){   
	if(patt_id==marker_info[j].id){
	    k = (k==-1)  ?   j : k;
	    k = (marker_info[k].cf < marker_info[j].cf)   ?  j: k;
	}
    }

    if(k!=-1) {
	if(isFirst==true)
	    nyar_NyARTransMat_O2_transMat(nyobj,&marker_info[k],patt_center,patt_width,patt_trans);
	else
	    nyar_NyARTransMat_O2_transMatCont(nyobj,&marker_info[k],patt_trans,patt_center,patt_width,patt_trans);

	isFirst=false;

	if(GameOver==false){
	    if(arUtilTimer()>1.0){
		MovePiece(3,f,p); 
		score+=f.ShiftPiece(f.deletePiece());
		arUtilTimerReset();
		GameOver=GameOverCheck(f,p);
	    }
	}
	else{
	    if(arUtilTimer()>15.0)
		InitGame();
	}
	DrawObject();
    }

    argSwapBuffers();
#ifdef _WIN32
    EndTime=timeGetTime();
    PassTime=EndTime-StartTime;
    (1000/FPS>PassTime)?Wait(1000/FPS-PassTime):Wait(0);
    FPSCount(&fps);
    printf("FPS=%d\n",fps);
#else
l_EndTime=gettimeofday_sec();
l_PassTime=l_EndTime-l_StartTime;
    ((double)(1000/FPS)>l_PassTime)?Wait((double)1000/FPS-l_PassTime):Wait(0);
    FPSCount(&fps);
    printf("FPS=%d\n",fps);
#endif
   
}