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();
    		}
    

     效果:

  • 相关阅读:
    java基础篇3---变量值转换(不使用中间变量)
    java基础篇2---逆序输出
    Java基础篇1---数据类型转换
    java基础篇8-----字符大小写字母的转换
    java基础篇7----java.util中的Scanner类的使用
    java基础篇0----运算符
    java基础篇5---循环结构
    ECMAScript arguments 对象(摘自W3C)
    JS中的this的应用总结
    定时器 + 简单的动画效果
  • 原文地址:https://www.cnblogs.com/yhlx125/p/6834832.html
Copyright © 2011-2022 走看看