///////////////////////////////////// // 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, ¢er, 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, ¢er, (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; } } }