zoukankan      html  css  js  c++  java
  • [QGLViewer]3D场景鼠标点击位置

    重载鼠标事件:

    void AxMapControl::mousePressEvent(QMouseEvent* e)
    {
    	switch(currentTool)
    	{
    		case AX_DRAW_DIRECTION:
    			{
    				if (e->button() == Qt::LeftButton) 
    				{
    					QPoint screenPt=e->pos();
    					qglviewer::Vec orig1, dir1;
    					camera()->convertClickToLine(screenPt, orig1, dir1);
    					double valueZ=0;
    					double a = ( valueZ- orig1.z) / dir1.z;
    					Pnt.z = valueZ;
    					Pnt.x = orig1.x + dir1.x * a;
    					Pnt.y = orig1.y + dir1.y * a;
    					//QMessageBox::information(this, "PickPoint",	QString::number(Pnt.x) + "," + QString::number(Pnt.y));
    				}
    				break;
    			}
    			
    	}
    	QGLViewer::mousePressEvent(e);
    }
    

     重载绘制方法

    void AxMapControl::draw()
    {
    		if (pimpl->points.size()>0)
    		{
    			QMutexLocker locker(&pimpl->mutex_);
    			glColor3f(255/255.0, 69/255.0, 0.0);
    			draw_3d_points(pimpl->points);
    		}
    		if (pimpl->pointCloudOneFrame.size()>0)
    		{
    			QMutexLocker locker(&pimpl->mutex_);
    			glColor3f(255/255.0, 69/255.0, 0.0);
    			for (vector<Point3ds>::const_iterator it = pimpl->pointCloudOneFrame.begin();it != pimpl->pointCloudOneFrame.end(); ++it) 
    			{
    				const Point3ds& p = *it;
    				if (p.size()>0)
    				{
    					draw_3d_points(p);
    				}
    				
    			}
    		}
    		if (!glImg.isNull())
    		{
    			glNormal3f(0.0, 0.0, 1.0);
    			glBegin(GL_QUADS);
    			glTexCoord2f(0.0,   1.0-v_max);	
    			glVertex2f(-u_max*ratio,-v_max);
    			glTexCoord2f(0.0,   1.0);		
    			glVertex2f(-u_max*ratio, v_max);
    			glTexCoord2f(u_max, 1.0);		
    			glVertex2f( u_max*ratio, v_max);
    			glTexCoord2f(u_max, 1.0-v_max);	
    			glVertex2f( u_max*ratio,-v_max);
    			glEnd();
    		}
    
    		if (currentTool==AX_DRAW_DIRECTION)
    		{
    			glBegin(GL_LINES);
    			glColor3f(255/255.0, 0/255.0, 0.0);
    			glVertex3fv(currentPose);
    			glVertex3fv(Pnt);
    			glEnd();
    		}
    

     效果:

  • 相关阅读:
    [FJWC2018]全排列
    CYJian的新春虐题赛
    C. 新年的繁荣
    CF809E Surprise me!
    codeforces 1110F
    C. mathematican 的二进制
    [SPOJ] DIVCNT2
    CF1065F Up and Down the Tree
    Snakes 的 Naïve Graph
    「LibreOJ Round #9」CommonAnts 的调和数
  • 原文地址:https://www.cnblogs.com/yhlx125/p/6834832.html
Copyright © 2011-2022 走看看