void QuaternionDemo::render() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); // (AB)-1 === B-1 A-1 glm::mat4 inverseViewMatrix = glm::translate(glm::mat4(1.0f), -viewTrans) * viewRot.inverse().toRotMatrix(); glm::mat4 projectionMatrix = glm::perspective(70.0f, 1024.0f/768.0f, 0.1f, 100.0f); glm::mat4 mvp = projectionMatrix * inverseViewMatrix; simpleShader.Use(); glUniformMatrix4fv(simpleShader["mvp"], 1, GL_FALSE, glm::value_ptr(mvp)); drawVectors(); drawOrigin(); simpleShader.UnUse(); SDL_GL_SwapWindow(mainWindow); }
void GLWidget::paintGL() { // /*int side = qMin(this->width(), this->height()); // 设置视口 glViewport((this->width() - side) / 2, (this->height() - side) / 2, side, side); // 指定当前矩阵 glMatrixMode(GL_PROJECTION); // 将当前矩阵换成单位阵 glLoadIdentity(); glOrtho(-viewPointLeng,+viewPointLeng, -viewPointLeng,+viewPointLeng, -1000,1000); glMatrixMode(GL_MODELVIEW); */ // glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity(); glTranslatef(0.0, 0.0, -10.0); glRotatef(xRot / 16.0, 1.0, 0.0, 0.0); glRotatef(yRot / 16.0, 0.0, 1.0, 0.0); glRotatef(zRot / 16.0, 0.0, 0.0, 1.0); /*for (int i = 0; i < vector3d_list.size(); i++) { Vector3D* temp = vector3d_list.at(i); glTranslatef(0.0, 0.0, -1.0); temp->draw(); }*/ //画坐标格 draw3DCoordinate(); if (pivdata != NULL && pivdata->list().length() > 0) drawVectors(pivdata); //qDebug() << "helloworld"; //qDebug() << "pivdata" << pivdata << "length" << pivdata->list().length(); }
void FluidDrawerBase::draw(float x, float y, float renderWidth, float renderHeight) { if(enabled == false) return; switch(drawMode) { case kFluidDrawColor: drawColor(x, y, renderWidth, renderHeight); break; case kFluidDrawMotion: drawMotion(x, y, renderWidth, renderHeight); break; case kFluidDrawSpeed: drawSpeed(x, y, renderWidth, renderHeight); break; case kFluidDrawVectors: drawVectors(x, y, renderWidth, renderHeight); break; } }
void Flow::draw() { glPushMatrix(); glTranslatef(m_position.m_x, m_position.m_y, m_position.m_z); drawVectors(); glColor4f(0.2f,0.2f,1.0f,0.5f); glLineWidth(0.1f); GLFunctions::WiredCube(m_fsize*2.0f, m_fsize*2.0f, m_fsize*2.0f); glLineWidth(3.0f); glColor4f(1.0f,0.1f,0.0f,0.8f); glPointSize(2.0f); glBegin(GL_POINTS); glVertex3f(m_position.m_x,m_position.m_y,m_position.m_z); glColor4f(1.0f,1.0f,1.0f,1.0f); glEnd(); //glPoint glPopMatrix(); }
void kangxueCalcVectorField(IplImage* sourceImage,IplImage* screen, std::vector<std::vector<CvPoint> > curves) { cvSetMouseCallback( "curveDetect", mouseCallback ) ; // calculate edgels and display it on the source image IplImage *edgelsImage = cvCreateImage(cvGetSize(sourceImage),IPL_DEPTH_8U, 1 ); getEdgels( sourceImage, edgelsImage ) ; // get gradient IplImage *gradImage = cvCreateImage(cvGetSize(sourceImage),IPL_DEPTH_8U, 3 ); getGradImage( sourceImage, gradImage, gradmap ); Edges dstSnakeCurves ; Edges dstVectorCurves ; int thresh_t100 = 100; cvCreateTrackbar("threshold", "curveDetect",&thresh_t100, 400 ) ; Edges edges_bkup ; //screen = cvCloneImage( sourceImage ) ; //已经注释掉了,需要在外部进行cpoy,防止指针出错 vecfield.compute( curves, cvSize( sourceImage->width,sourceImage->height), 400 ) ; //drawCurves( screen , curves, cvScalar(255,0,255),2) ; drawVectors( screen, vecfield ) ; return; while(1){ screen = cvCloneImage( sourceImage ) ; if( displayEdge ) cvCvtColor(edgelsImage, screen, CV_GRAY2RGB) ; if( displayCurve ) drawCurves( screen , curves, cvScalar(255,0,255),2) ; if( 0 && curves.size() && curves[0].size() > 10 ){ Edges guideCurve, spline ; guideCurve.elems = curves ; getUniformCubicBSpline(guideCurve, spline) ; drawCurves( screen , spline.elems, cvScalar(0,255,0),2) ; } if( AppState != _draw_curves && displayVector) drawVectors( screen, vecfield ) ; if( AppState == _got_result ) if( displayVecOrSnake ) drawCurves(screen, dstSnakeCurves.elems , cvScalar(0,255,255),2) ; else drawCurves(screen, dstVectorCurves.elems , cvScalar(0,255,0),2) ; if( AppState >= _edges_linkeded ){ edges = edges_bkup ; filterLinkedEdge(edges, vecfield, gradmap, curves, thresh_t100 * 0.01 ) ; } if( displayEdges ) drawCurves_randomColor( screen, edges.elems, 4 ) ; cvShowImage("curveDetect", screen ); unsigned char key = cvWaitKey(50) ; if( key == 99 ) break; // press c to exit if( key == 114 ){ // press r to reset curves.clear() ; AppState = _draw_curves ; getEdgels( sourceImage, edgelsImage ) ; edges.elems.clear(); dstVectorCurves.elems.clear(); dstSnakeCurves.elems.clear(); ctrpoints.elems.clear(); } if( key == 115 ){ // press s if( AppState == _draw_curves ){ AppState = _show_vectors ; // calculate vector field std::cout<<"begin calculate the vector field" << std::endl; vecfield.compute( curves, cvSize( sourceImage->width,sourceImage->height), 400 ) ; std::cout<<"vector field calculated" << std::endl; } } } }
int main2(int argc, char **argv) { std::cout<<" LBFGSERR_MAXIMUMLINESEARCH == "<< LBFGSERR_MAXIMUMLINESEARCH << std::endl; std::string sourceImageName ; sourceImageName = std::string("/home/netbeen/桌面/周叔项目/imgSalCurDetector/test.jpg") ; sourceImage = cvLoadImage(sourceImageName.c_str(), CV_LOAD_IMAGE_COLOR) ; cvNamedWindow( "curveDetect") ; cvSetMouseCallback( "curveDetect", mouseCallback ) ; // calculate edgels and display it on the source image IplImage *edgelsImage = cvCreateImage(cvGetSize(sourceImage),IPL_DEPTH_8U, 1 ); getEdgels( sourceImage, edgelsImage ) ; // get gradient IplImage *gradImage = cvCreateImage(cvGetSize(sourceImage),IPL_DEPTH_8U, 3 ); getGradImage( sourceImage, gradImage, gradmap ); Edges dstSnakeCurves ; Edges dstVectorCurves ; int thresh_t100 = 100; cvCreateTrackbar("threshold", "curveDetect",&thresh_t100, 400 ) ; Edges edges_bkup ; while(1){ IplImage *screen = cvCloneImage( sourceImage ) ; if( !displaySourceimage ){ std::cout << "NO, 我删掉了一行" << std::endl; //cvCopyImage(gradImage,screen); //////////////////////////////////////////////////////////////////////我删掉了一行////////////////////////////////////// } if( displayEdge ) cvCvtColor(edgelsImage, screen, CV_GRAY2RGB) ; if( displayCurve ) drawCurves( screen , curves, cvScalar(255,0,255),2) ; if( 0 && curves.size() && curves[0].size() > 10 ){ Edges guideCurve, spline ; guideCurve.elems = curves ; getUniformCubicBSpline(guideCurve, spline) ; drawCurves( screen , spline.elems, cvScalar(0,255,0),2) ; } if( AppState != _draw_curves && displayVector) drawVectors( screen, vecfield ) ; if( AppState == _got_result ) if( displayVecOrSnake ) drawCurves(screen, dstSnakeCurves.elems , cvScalar(0,255,255),2) ; else drawCurves(screen, dstVectorCurves.elems , cvScalar(0,255,0),2) ; if( AppState >= _edges_linkeded ){ edges = edges_bkup ; filterLinkedEdge(edges, vecfield, gradmap, curves, thresh_t100 * 0.01 ) ; } if( displayEdges ) drawCurves_randomColor( screen, edges.elems, 4 ) ; cvShowImage("curveDetect", screen ); unsigned char key = cvWaitKey(50) ; if( key !=255) std::cout<<(unsigned)key ; if( key == 99 ) break; // press c to exit if( key == 27 ) { // press ESC to delete the last curve drawn by user if( AppState == _draw_curves && curves.size()!=0) curves.erase( curves.end()-1) ; } if( key == 114 ){ // press r to reset curves.clear() ; AppState = _draw_curves ; getEdgels( sourceImage, edgelsImage ) ; edges.elems.clear(); dstVectorCurves.elems.clear(); dstSnakeCurves.elems.clear(); ctrpoints.elems.clear(); } if( key == 9 ) // press TAB to switch between displaying sourceImage and edges displayEdge = !displayEdge ; if( key == 113 ) //press q displayVector = !displayVector ; if( key == 101 ) //press e displaySourceimage = !displaySourceimage ; if( key == 97 ) //press a displayVecOrSnake = !displayVecOrSnake ; if( key == 122 ) //press z displayEdges = !displayEdges ; if( key == 119 ) // press TAB to switch between displaying sourceImage and edges displayCurve = !displayCurve ; if( key == 115 ){ // press s if( AppState == _draw_curves ){ AppState = _show_vectors ; // calculate vector field std::cout<<"begin calculate the vector field" << std::endl; vecfield.compute( curves, cvSize( sourceImage->width,sourceImage->height), 400 ) ; std::cout<<"vector field calculated" << std::endl; std::cout << "验证,是main2" << std::endl; //cvZero( bandMsk ) ; //drawCurves( bandMsk, curves, cvScalar(1, 1,1), 80 ) ; //cvMul(bandMsk, edgelsImage, edgelsImage ) ; } /*else if( AppState == _show_vectors ){ AppState = _edges_linkeded ; linkEdge(edgelsImage, edges, 20) ; edges_bkup = edges ; } else if( AppState == _edges_linkeded ){ AppState = _edges_filtered ; filterLinkedEdge( edges, vecfield, gradmap, curves, thresh_t100 * 0.01 ) ; } else if( AppState == _edges_filtered ){ AppState = _new_field ; std::vector<std::vector<CvPoint> > allCurves = edges.elems; for( size_t i=0; i<curves.size(); ++i ) allCurves.push_back(curves[i] ) ; // smooth edges std::cout<<"begin calculate the new vector field" << std::endl; vecfield.compute( edges.elems, cvSize( sourceImage->width,sourceImage->height), 400 ) ; std::cout<<"new vector field calculated" << std::endl; } else if( AppState == _new_field ){ AppState = _got_result ; // calculate ctrpoints ctrpoints.elems = curves ; CvPoint prepoint = ctrpoints.elems[0][0] ; for( size_t j=1; j<ctrpoints.elems[0].size()-1; ++j ){ if( sqrt( (double)((prepoint.x - ctrpoints.elems[0][j].x) *(prepoint.x - ctrpoints.elems[0][j].x) + (prepoint.y - ctrpoints.elems[0][j].y) *(prepoint.y - ctrpoints.elems[0][j].y)) ) > 20 ){ prepoint = ctrpoints.elems[0][j] ; } else{ ctrpoints.elems[0].erase( ctrpoints.elems[0].begin() + j ) ; j-- ; } } #define _lbfgs 0 if( _lbfgs ){ // Snakes extern bool consider_vecfield ; consider_vecfield = false ; std::cout<<"begin optimization: consider_vecfield = false"<<std::endl; int ret = 0; lbfgsfloatval_t fx; lbfgsfloatval_t *x = lbfgs_malloc( ctrpoints.elems[0].size() * 2 ); lbfgs_parameter_t param; if (x == NULL) { printf("ERROR: Failed to allocate a memory block for variables.\n"); return 1; } // Initialize the variables. for (size_t i = 0;i < ctrpoints.elems[0].size() * 2 ; i++) x[i] = 0; lbfgs_parameter_init(¶m); param.max_linesearch = 100 ; ret = lbfgs(ctrpoints.elems[0].size() * 2, x, &fx, evaluate, progress, NULL, ¶m); printf("L-BFGS optimization terminated with status code = %d\n", ret); printf(" fx = %f, x[0] = %f, x[1] = %f\n", fx, x[0], x[1]); // apply the optimization result to ctrpoints Edges dstctrpoints = ctrpoints ; for( size_t i=0; i<dstctrpoints.elems[0].size(); ++i ){ dstctrpoints.elems[0][i].x += x[ i ] ; dstctrpoints.elems[0][i].y += x[ i + dstctrpoints.elems[0].size() ] ; } curve_interplation(dstctrpoints, dstSnakeCurves ) ; // field guided snakes consider_vecfield = true ; std::cout<<"begin optimization: consider_vecfield = true"<<std::endl; for (size_t i = 0;i < ctrpoints.elems[0].size() * 2 ; i++) x[i] = 0; lbfgs_parameter_init(¶m); param.max_linesearch = 100 ; ret = lbfgs(ctrpoints.elems[0].size() * 2, x, &fx, evaluate, progress, NULL, ¶m); printf("L-BFGS optimization terminated with status code = %d\n", ret); printf(" fx = %f, x[0] = %f, x[1] = %f\n", fx, x[0], x[1]); // apply the optimization result to ctrpoints dstctrpoints = ctrpoints ; for( size_t i=0; i<dstctrpoints.elems[0].size(); ++i ){ dstctrpoints.elems[0][i].x += x[ i ] ; dstctrpoints.elems[0][i].y += x[ i + dstctrpoints.elems[0].size() ] ; } curve_interplation(dstctrpoints, dstVectorCurves ) ; lbfgs_free(x); } else{ // Snakes extern bool consider_vecfield ; consider_vecfield = false ; std::cout<<"begin optimization: consider_vecfield = false"<<std::endl; splab::BFGS<double, EnergyFunction> solver; splab::Vector<double> x0; x0.resize(ctrpoints.elems[0].size() * 2) ; for( int i=0; i<x0.size(); ++i ) x0[i] = 0 ; EnergyFunction ef ; solver.optimize(ef, x0, 1e-10, 1000 ) ; x0 = solver.getOptValue() ; std::cout<<"func["<<x0<<"] = "<<solver.getFuncMin()<<std::endl; std::vector<double> X; for( int i=0; i<x0.size(); ++i ) X.push_back(x0[i]); // apply the optimization result to ctrpoints Edges dstctrpoints = ctrpoints ; for( size_t i=0; i<dstctrpoints.elems[0].size(); ++i ){ dstctrpoints.elems[0][i].x += X[ i ] ; dstctrpoints.elems[0][i].y += X[ i + dstctrpoints.elems[0].size() ] ; } getUniformCubicBSpline(dstctrpoints, dstSnakeCurves ) ; // field guided Snakes consider_vecfield = true ; std::cout<<"begin optimization: consider_vecfield = true"<<std::endl; for( int i=0; i<x0.size(); ++i ) x0[i] = 0 ; solver.optimize(ef, x0, 1e-10, 1000 ) ; x0 = solver.getOptValue() ; std::cout<<"func["<<x0<<"] = "<<solver.getFuncMin()<<std::endl; // apply the optimization result to ctrpoints for( size_t i=0; i<ctrpoints.elems[0].size(); ++i ){ ctrpoints.elems[0][i].x += x0[ i ] ; ctrpoints.elems[0][i].y += x0[ i + ctrpoints.elems[0].size() ] ; } getUniformCubicBSpline(ctrpoints, dstVectorCurves) ; } }*/ } } return 0; }