QT框架下的OpenGL使用---实战篇---鼠标选取点对象
本篇文章是点云显示和交互以及摄像机这两篇文章的后续,如有疑惑可查看这两篇文章。
在OpenGL的使用中,用其显示3D点云是非常常见的操作,而进一步让用户可以选择点云以查看其信息可以使得开发变得更加简单,本篇文章我们将讨论怎么实现这一功能。
要用鼠标圈选点云,要解决的问题就是得到鼠标圈选的范围内有哪些点,也就是要知道OpenGL的顶点到屏幕坐标之间的映射关系。这一映射关系我们在摄像机这篇文章已经得到了,它就是:
QMatrix4x4 mvp;
这个对象,我们在顶点着色器中用它和顶点坐标相乘直接得到了顶点的3D坐标:
gl_Position = MVP * vec4(posVertex, 1.0f);
因此如果我们在鼠标圈选之后遍历所有的点,然后再计算一遍这个投影关系,就可以知道哪些点是在圈选的范围内的点,代码和解释如下:
for (int i = 0; i < 230400; i++)
{QVector4D screen = mvp.map(QVector4D(QVector3D(vertices[i * 6 + 0], vertices[i * 6 + 1], vertices[i * 6 + 2]), 1.0f));//QVector4D是四维的齐次坐标,需要将前三维的值除以第四个维度的值,以转换到笛卡尔坐标系下if (screen.w() != 0.0f){screen.setX(screen.x() / screen.w());screen.setY(screen.y() / screen.w());screen.setZ(screen.z() / screen.w());}//这里我们直接选择了x,y轴-0.5~0.5的点,也就是OpenGL显示框内中心长宽为显示框一半的矩形圈内的点,如果想实现鼠标圈选,则再做一次鼠标圈选范围到OpenGL显示框的映射关系就可以了。需要注意的是OpenGL显示宽的长和宽都是用-1~1进行表示的。if (screen.x() > -0.5 && screen.x() < 0.5 && screen.y() > -0.5 && screen.y() < 0.5){}
}
参考文章
https://blog.csdn.net/weixin_42108411/article/details/105392471
https://www.cnblogs.com/icmzn/p/7373663.html
QT框架下的OpenGL使用---实战篇---鼠标选取点对象相关推荐
- QT框架下的OpenGL使用---实战篇---图像的显示
阅读本篇文章需要提前掌握OpenGL纹理的相关知识. 做计算机视觉或者播放器等项目,通常需要将图像处理的结果显示给用户看,在Qt上可以用label控件来完成,但其效率相对较低.这里我们介绍一种用Qt自 ...
- caffe框架下目标检测——faster-rcnn实战篇操作
原有模型 1.下载fasrer-rcnn源代码并安装 git clone --recursive https://github.com/rbgirshick/py-faster-rcnn.git 1) ...
- caffe框架下目标检测——faster-rcnn实战篇问题集锦
1.问题 解决方案:没编译好,需要在lib下编译make 需要在caffe-fast-rcnn下编译make或者make all -j16 ,还需要make pycaffe 2.问题 解决方案:/p ...
- linux下文件字符集转化实战篇
linux下文件字符集转化实战篇 ------------------------------------------ 为什么转换编码,起因:分析应用程序日志,文件编码格式gb2312(含中文字符), ...
- C++/Qt框架下的简易计算器
C++/Qt框架下的简易计算器 1.简易计算器-介绍 该项目目标是设计开发一个支持连续计算的简易计算器,通过单击按钮,输入并完成如4+5+6或5×8+16类似的各种连续计算,并将运算结果显示在输出文本 ...
- 在QT框架下进行仿照PS图像调整功能设计(亮度对比度,色相饱和度及明度)
原文链接:https://blog.csdn.net/maozefa/article/details/4778934 图像亮度调整分为非线性和线性两种方法. 非线性图像亮度是将图像像素的R.G.B分别 ...
- 基于MFC框架下OpenGL的exe可移植
以前写了几个MFC框架下的OpenGL小项目,但是移植exe的时候总需要copy很多dll文件,感觉太low,于是今天就抽时间解决了这个问题. 首先 我们了解一下关于MFC的两个运行机制: 一.MFC ...
- 基于海思平台与QT框架的高效视频显示
首先,不涉及视频解码,仅涉及解码之后的视频缩放.颜色空间转换(如YUV转RGB).贴图.本文主要说明的是在QT框架没有使用OpenGl的情况下,如何让解码后的视频更高效的展示出来. 海思底层解码出来的 ...
- 基于Qt框架实现的 C/S架构的外卖平台软件系统
资源下载地址:https://download.csdn.net/download/sheziqiong/85628215 基于Qt框架实现的 C_S架构的外卖平台软件系统 演示视频 C/S 架构的外 ...
- QT下使用OpenGL渲染Mesh的框架
说说我的QT下使用OpenGL渲染Mesh的框架 http://www.xpc-yx.com/2015/03/13/%E8%AF%B4%E8%AF%B4%E6%88%91%E7%9A%84qt%E4% ...
最新文章
- 题目 1471:【蓝桥杯】【入门题】【基础练习VIP】矩形面积交
- html中不透明度怎么写,css如何设置div不透明度?
- 如何看你的信息有没有泄露
- Fedora 19 Mate环境安装Gnome3
- Bootstrap 表单的帮助文本
- Seata分布式事务问题由来---微服务升级_SpringCloud Alibaba工作笔记0056
- 如何在SQL Server 2016中比较查询执行计划
- 代码逻辑分析_致C++完美主义者:使用Visual Studio新工具分析你的代码
- 在变量前面加个叹号什么意思_a little表示很少,quite a little什么意思?形容数量多少的用法...
- Xilinx FPGA 下载器驱动提示“系统找不到指定的路径”的解决办法
- UStore-添加自定义工作流(JDF)到产品
- swing的maven项目打成jar包
- 【工作笔记】004 tapestry框架
- 【附源码】计算机毕业设计SSM喜枫日料店自助点餐系统
- 小波变换:基于matlab的数字图像水印嵌入及提取(灰度图)
- tcpdump 分析
- JS返回到上一页的三种方法
- 第14周 预习实验与作业:Java数据库编程
- 【ELM】动态自适应可变加权极限学习机ELM预测(Matlab代码实现)
- PMP项目管理 考试题型,六大解题原则定要牢牢记住!