Esempio n. 1
0
/////////////////////////////////////
// Purpose:	blt given texture
//			make sure you call 
//			TextureBegin first
// Output:	texture blted on screen
// Return:	TRUE if success
/////////////////////////////////////
u32 IgfxTexture::Blt(f32 x, f32 y, const iRect *srcRect, gfxBlt *pBlt)
{
	Vec3D vect(x,y,0);

	D3DXVECTOR3 center(0,0,0);

	PGFXTEXTURE texture = (PGFXTEXTURE)GetImg();

	if(!texture) return FALSE;

	if(pBlt)
	{
		Vec3D scale(1,1,1);
		Vec3D rotCenter(pBlt->rotOfsX,pBlt->rotOfsY,0);

		f32 sW, sH;
	
		if(srcRect)
		{ sW = (f32)(srcRect->right - srcRect->left); sH = (f32)(srcRect->bottom - srcRect->top); }
		else
		{ sW = (f32)m_width; sH = (f32)m_height; }

		if(TESTFLAGS(pBlt->flags, GFXBLT_FLIPH))
		{ scale.x = -1; center.x += sW; }

		if(TESTFLAGS(pBlt->flags, GFXBLT_FLIPV))
		{ scale.y = -1; center.y += sH; }

		if(pBlt->rot != 0 && !TESTFLAGS(pBlt->flags, GFXBLT_ROTABS))
		{ rotCenter.x -= sW/2; rotCenter.y -= sH/2; }

		Matrix scaleRotOfsM(scale.x, 0,       0,       rotCenter.x,
			                0,       scale.y, 0,       rotCenter.y,
							0,       0,       scale.z, rotCenter.z,
							0,       0,       0,       1);

		Matrix rotRotOfsInvTransM; MtxRotateZ(pBlt->rot, &rotRotOfsInvTransM);
		
		rotRotOfsInvTransM._41 = -rotCenter.x;
		rotRotOfsInvTransM._42 = -rotCenter.y;
		rotRotOfsInvTransM._43 = -rotCenter.z;

		Matrix transM; MtxTranslate(&vect, &transM);

		s_pTxtSprite->SetTransform((D3DXMATRIX*)&Matrix(scaleRotOfsM*rotRotOfsInvTransM*transM));
		s_pTxtSprite->Draw(texture, (const RECT*)srcRect, &center, 0, pBlt->clr);

		//g_pTxtSprite->Draw(texture, (const RECT*)srcRect, &scale, &rotCenter, pBlt->rot, &vect, pBlt->clr);
	}
	else
	{
		Matrix mtxIden; MtxIdentity(&mtxIden);
		s_pTxtSprite->SetTransform((D3DXMATRIX*)&mtxIden);
		s_pTxtSprite->Draw(texture, (const RECT*)srcRect, &center, (D3DXVECTOR3*)&vect, 0xffffffff);
	}

	s_pTxtSprite->Flush();

	return TRUE;
}
void SegmenterLightTest::run(std::string _rgbd_filename,
                             int _startIdx, int _endIdx,
                             bool _live)
{
    bool processed = false;
    database_path = "";
    rgbd_filename = _rgbd_filename;
    startIdx = _startIdx;
    endIdx = _endIdx;
    data_live = _live;
    init();

    // ######################## Setup TomGine ########################
    int width = 640;
    int height = 480;
    surface::View view;

#ifdef V4R_TOMGINE
    TomGine::tgTomGineThread dbgWin(width, height, "TomGine Render Engine");
#endif
    cv::Mat R = (cv::Mat_<double>(3, 3) << 1, 0, 0, 0, 1, 0, 0, 0, 1);
    cv::Mat t = (cv::Mat_<double>(3, 1) << 0, 0, 0);
    cv::Vec3d rotCenter(0, 0, 1.0);

    cv::Mat intrinsic;
    intrinsic = cv::Mat::zeros(3, 3, CV_64F);
    view.intrinsic = Eigen::Matrix3d::Zero();
    intrinsic.at<double> (0, 0) = intrinsic.at<double> (1, 1) = view.intrinsic(0, 0) = view.intrinsic(1, 1) = 525;
    intrinsic.at<double> (0, 2) = view.intrinsic(0, 2) = 320;
    intrinsic.at<double> (1, 2) = view.intrinsic(1, 2) = 240;
    intrinsic.at<double> (2, 2) = view.intrinsic(2, 2) = 1.;

#ifdef V4R_TOMGINE
    dbgWin.SetClearColor(0.0, 0.0, 0.0);
//   dbgWin.SetCoordinateFrame();
    dbgWin.SetCamera(intrinsic);
    dbgWin.SetCamera(R, t);
    dbgWin.SetRotationCenter(rotCenter);
    dbgWin.SetInputSpeeds(0.5, 0.5, 0.5);
    dbgWin.Update();
#endif

    cv::Mat_<cv::Vec3b> kImage = cv::Mat_<cv::Vec3b>::zeros(480, 640);
    cv::imshow("Debug image", kImage);

    bool do_it = true;
    bool single_image = true;
    bool win_done = true;
    while(do_it) {
        if(!single_image) {
            process();
            ConvertPCLCloud2Image(pcl_cloud, kImage);
            cv::imshow("Debug image", kImage);
            cvWaitKey(10);
#ifdef V4R_TOMGINE
            dbgWin.SetImage(kImage);
            dbgWin.Update();
#endif
            win_done = false;
        }

        int key = cvWaitKey(50);

        if((char) key == 'h') {
            printf("[SegmenterLightTest] Print help:\n");
            printf("  Debug window:\n");
            printf("    \'h\' - Print this help.\n");
            printf("    \'F9\' - Process single data file.\n");
            printf("    \'F10\' - Process data file sequence. \n");
            printf("    \'5\' - Show results.\n");
            printf("    \'q\' - Quit.\n");
            printf("  TomGine Render Engine:\n");
            printf("    \'z\' - To initial position.\n");
            printf("    \'i\' - Enable/disable background image.\n");
            printf("    \'t\' - Enable/disable text annotation.\n");
            printf("    \'p\' - Enable/disable displaying of point cloud.\n");
            printf("    \'F11\' - Save sceenshot.\n");
            printf("    \'q\' - Quit.\n");
        }

        if (key == 65478 || key == 1114054)  { // F9
            printf("[SegmenterLightTest] Process single image.\n");
            process();
            ConvertPCLCloud2Image(pcl_cloud, kImage);
            cv::imshow("Debug image", kImage);
#ifdef V4R_TOMGINE
            dbgWin.SetImage(kImage);
            dbgWin.Update();
#endif
            win_done = false;
            processed = true;
        }
        if (key == 65479 || key == 1114055)  { // F10
            printf("[SegmenterLightTest] Process images countiniously.\n");
            single_image = false;
            processed = true;
        }

        if((char) key == 'q') {
            printf("[SegmenterLightTest] Quit.\n");
            do_it = false;
        }

        if((char) key == '5' || !win_done) {
#ifdef V4R_TOMGINE
            dbgWin.Clear();
            std::vector<cv::Vec4f> vec_cloud;
            ConvertPCLCloud2CvVec(pcl_cloud_labeled, vec_cloud);
            dbgWin.AddPointCloud(vec_cloud);
            dbgWin.Update();
#endif
            win_done = true;
        }
    }
}