[QGLViewer]3D场景鼠标点击位置
生活随笔
收集整理的這篇文章主要介紹了
[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();}?效果:
總結
以上是生活随笔為你收集整理的[QGLViewer]3D场景鼠标点击位置的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 后端码农谈前端(HTML篇)第三课:常见
- 下一篇: SSM框架整合中遇到重复的问题Ambig