void CVT::display_GPU(void) { vor_GPU(); move_sites_GPU(); iteration++; glutSwapBuffers(); }
void CVT::compute_weighted_cvt_GPU(cv::Mat & img, std::vector<cv::Point2d> & sites) { //inint int site_size = sites.size(); cells.resize(site_size); for (int i = 0; i < site_size; i++) { cells[i].site = sites[i]; } float max_dist_moved = FLT_MAX; vor_GPU(img); }
void CVT::compute_weighted_cvt_GPU(cv::Mat & img, std::vector<cv::Point2d> & sites) { //inint int site_size = sites.size(); cells.resize(site_size); for (int i = 0; i < site_size; i++) { cells[i].site = sites[i]; } float max_dist_moved = FLT_MAX; int width = img.size().width; int height = img.size().height; glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA | GLUT_DEPTH); glutInitWindowSize(width, height); glutInitWindowPosition(180, 100); glutCreateWindow("CVT"); glEnable(GL_DEPTH_TEST); glViewport(0, 0, width, height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(0, width, 0, height, -1, 0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); pixels = new unsigned char[4 * img.size().width*img.size().height]; //4를 곱하는 이유, 한 픽셀에 rgb,알파 int iteration = 0; do { vor_GPU(img); //compute voronoi max_dist_moved = move_sites(img); if (debug) std::cout << "[" << iteration << "] max dist moved = " << max_dist_moved << std::endl; iteration++; } while (max_dist_moved>max_site_displacement && iteration < this->iteration_limit); delete[] pixels; glClearColor(1.0f, 1.0f, 1.0f, 1.0f);//CVT construnctor에 들어가야 ////glutMainLoop에 들어가면 계속 그림을 그리느라 바빠서 stipple을 못그린다. //glutMainLoop(); if (debug) cv::waitKey(); }
void CVT::compute_weighted_cvt_GPU(cv::Mat & img, std::vector<cv::Point2d> & sites) { //inint int site_size = sites.size(); cells.resize(site_size); for (int i = 0; i < site_size; i++) { cells[i].site = sites[i]; } float max_dist_moved = FLT_MAX; int iteration = 0; do { vor_GPU(img); //compute voronoi max_dist_moved = move_sites(img); if (debug) std::cout << "[" << iteration << "] max dist moved = " << max_dist_moved << std::endl; iteration++; } while (max_dist_moved>max_site_displacement && iteration < this->iteration_limit); if (debug) cv::waitKey(); }