Qt+OpenGL做的蕾达显示程序[含源代码]

本文介绍了一种利用OpenGL和Qt5实现雷达余晖效果的方法,通过片断着色器技术在PPI视图中高效渲染大量数据点,同时保持较低的CPU占用率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

用途:

工作中辅助终端调试的。


特点:
  1. 插件架构:类似于Qt Creator。
  2. 采用OpenGL的FBO和顶点、片段着色器特性实现了雷达余晖效果,PPI视图可以实现每秒渲染数十万点,不到3% cpu占用率。
  3. 基于Qt5与Qt3D,使用QGraphicsItem包装OpenGL绘制的图元,与2D的文字,坐标轴放到一个graphics scene。
  4. model/view的性能优化:model记录更改,每隔一段时间通知view。


截图:




代码:
 daviz.zip (302 K) 下载次数:1817 

比较 有趣与大家分享。



1、在qt-project.org上下载Qt 5.0.2。
2、安装QT5.0.2
3、下载一个PortableGit工具,用于下载QT3D
4、在PortableGit目录下打开git-bash.bat
5、git clone git://gitorious.org/qt/qt3d.git qt3d 下载QT3D
6、下载Perl,不然编译QT3D缺少perl.exe。
7、下载地址http://strawberry-perl.googlecode.com/files/strawberry-perl-5.16.3.1-64bit.msi
8、 将QT3D放入无中文件的目录中。
9、打开QT命令窗口,进入QT3D目录。
10、设置环境变量,在命令窗口中输入set PATH=C:\Qt\Strawberry\perl\bin;C:\Qt\Qt5.0.2\5.0.2\mingw47_32\bin;C:\Qt\Qt5.0.2\Tools\MinGW\bin
11、qmake qt3d.pro
12、mingw32-make(QT5没有make命令,如果需要,自己可以加)
13、mingw32-make install


额,实现PPI余晖是采用片断着色器,就在 plugins/ppiview/ppieffect.frag

  1. uniform sampler2D qt_Texture0;
  2. varying vec4 qt_TexCoord0;
  3. uniform float specialSector;
  4. uniform float cycle;
  5. uniform float decayFactor;
  6. uniform float antennaPosition;
  7. varying vec4 vertexPosition;
  8. uniform mat4 qt_ModelViewProjectionMatrix;
  9. uniform vec2 coordCenter;
  10. void main(void)
  11. {
  12.     float angle;
  13.     float diff;
  14.     float r;
  15.     vec2 pos;
  16.     pos.x =  qt_TexCoord0.s * 2.0 - 1.0;
  17.     pos.y = -qt_TexCoord0.t * 2.0 + 1.0;
  18.     pos -= coordCenter;
  19.     r = sqrt(pos.x*pos.x + pos.y * pos.y);
  20.     if (pos.x >= 0.0) {
  21.         if (pos.y > 0.0)
  22.             angle = degrees(asin(pos.x/r));
  23.         else
  24.             angle = 180.0 - degrees(asin(pos.x/r));
  25.     } else {
  26.         if (pos.y > 0.0)
  27.             angle = 360.0 - degrees(asin(-pos.x/r));
  28.         else
  29.             angle = 180.0 + degrees(asin(-pos.x/r));
  30.     }
  31.     if (angle <= antennaPosition)
  32.         diff = antennaPosition-angle;
  33.     else
  34.         diff = 360.0-(angle-antennaPosition);
  35.     if (specialSector * 30.0 <= angle && angle < (specialSector + 1.0) * 30.0 && diff > 180.0)
  36.         diff -= 360.0;
  37.     diff += cycle * 360.0;
  38.     vec4 color = texture2D(qt_Texture0, qt_TexCoord0.st);
  39.     float mixed = 1.0 - 4.0 * exp(-diff/decayFactor);
  40.     if (mixed < 0.0)
  41.         mixed = 0.0;
  42.     gl_FragColor = mix(color, vec4(0.0,0.0,0.0,0.0), mixed);
  43. }



FROM: http://www.qtcn.org/bbs/read-htm-tid-51275.html


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值