最终效果如下所示

Demo下载  http://files.cnblogs.com/xd-jinjian/Debug.zip

源代码下载 http://download.csdn.net/detail/xdjinjian/8266927

绘制扫面线部分代码如下,扫面部分可改进使用粒子系统,以增加真实感。

    glBegin(GL_TRIANGLE_FAN);glColor4f(0.0f, 0.0f, 0.0f,1.0f);glVertex2f(0.0f, 0.0f);    for(int i=0;i<N;++i){ pos_x=cos((i/180.0)*Pi+theta)*R;pos_y=sin((i/180.0)*Pi+theta)*R;glColor4f(0.0f, (i+0.01)/N, 0.0f,0.8f);glVertex2f(pos_x, pos_y); }glEnd();    

雷达界面的框架部分使用纹理贴图完成,加载位图资源代码如下

int power_of_two(int n)
{ if( n <= 0 ) return 0; return (n & (n-1)) == 0;
} GLuint load_texture(const char* file_name)
{ GLint width, height, total_bytes; GLubyte* pixels = 0; GLint last_texture_ID;GLuint texture_ID = 0; FILE* pFile = fopen(file_name, "rb"); if( pFile == 0 ) return 0; // 读取文件中图象的宽度和高度 fseek(pFile, 0x0012, SEEK_SET); fread(&width, 4, 1, pFile); fread(&height, 4, 1, pFile); fseek(pFile, BMP_Header_Length, SEEK_SET); // 计算每行像素所占字节数,并根据此数据计算总像素字节数
        { GLint line_bytes = width * 3; while( line_bytes % 4 != 0 ) ++line_bytes; total_bytes = line_bytes * height; } // 根据总像素字节数分配内存 pixels = (GLubyte*)malloc(total_bytes); if( pixels == 0 ) { fclose(pFile); return 0; } // 读取像素数据 if( fread(pixels, total_bytes, 1, pFile) <= 0 ) { free(pixels); fclose(pFile); return 0; } { GLint max; glGetIntegerv(GL_MAX_TEXTURE_SIZE, &max); if( !power_of_two(width) || !power_of_two(height) || width > max || height > max ) { const GLint new_width = 256; const GLint new_height = 256; // 规定缩放后新的大小为边长的正方形
            GLint new_line_bytes, new_total_bytes; GLubyte* new_pixels = 0; // 计算每行需要的字节数和总字节数 new_line_bytes = new_width * 3; while( new_line_bytes % 4 != 0 ) ++new_line_bytes; new_total_bytes = new_line_bytes * new_height; // 分配内存 new_pixels = (GLubyte*)malloc(new_total_bytes); if( new_pixels == 0 ) { free(pixels); fclose(pFile); return 0; } gluScaleImage(GL_RGB, width, height, GL_UNSIGNED_BYTE, pixels, new_width, new_height, GL_UNSIGNED_BYTE, new_pixels); // 释放原来的像素数据,把pixels指向新的像素数据,并重新设置width和height
            free(pixels); pixels = new_pixels; width = new_width; height = new_height; } } glGenTextures(1, &texture_ID); if( texture_ID == 0 ) { free(pixels); fclose(pFile); return 0; } glGetIntegerv(GL_TEXTURE_BINDING_2D, &last_texture_ID); glBindTexture(GL_TEXTURE_2D, texture_ID); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_BGR_EXT, GL_UNSIGNED_BYTE, pixels); glBindTexture(GL_TEXTURE_2D, last_texture_ID); free(pixels); return texture_ID;
} 

使用位图资源

texGround = load_texture("xxxxx.bmp");

纹理贴图

    glEnable(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D, texGround); glBegin(GL_QUADS); glTexCoord2f(0.0f, 0.0f); glVertex3f(-0.5f, -0.5f,-0.0f); glTexCoord2f(0.0f, 1.0f); glVertex3f(-0.5f, 0.5f,-0.0f); glTexCoord2f(1.0f, 1.0f); glVertex3f(0.5f, 0.5f,-0.0f); glTexCoord2f(1.0f, 0.0f); glVertex3f(0.5f, -0.5f,-0.0f); glEnd();

注意画图形时打开纹理混合,并关闭深度测试

    glDisable(GL_DEPTH_TEST);glEnable(GL_BLEND);        

转载于:https://www.cnblogs.com/xd-jinjian/p/3916954.html

OpenGL 画出雷达动态扫描效果(一)相关推荐

  1. OpenGL 画出雷达动态扫描效果(二) 非底图

    OpenGL 画出雷达动态扫描效果(一)中给出了已一张图片作为底图的雷达扫面程序 如果有漂亮的雷达底图的话,效果应该非常不错的,另外也可以直接手绘雷达框架 效果如下 雷达主体代码 glLineWidt ...

  2. 使用OpenGL画出四边形不完整的解决

    记录一个使用OpenGL做实验时遇到的小坑. 问题描述: 想要使用OpenGL画一个正方体,效果如下: 其实现方式是通过三维坐标分别画出它的每个面 于是我们使用以下代码来画出一个正方形平面: glBe ...

  3. qt仿雷达图扫描效果

    话不多说,上代码. 头文件: #ifndef CRADAR_H #define CRADAR_H/************************************************* 描 ...

  4. 使用OpenGL画出一个三维管道模型

    **重点在于需要一点空间想象力和会使用lagrange插值函数. 在此基础上给出部分点的数据,即可画出圆滑的渐变管道模型. 每两组数据即可画一次壁,此代码每个壁分为360个三角形(三角形越多,画出来越 ...

  5. matlab 渲染效果,如何用Matlab快速画出带有3D渲染效果的复杂曲面

    Matlab是一个很常用的理工科数学软件,我们平常会用它来画一些平面函数或者简单的曲线或者简单的3D平面图,但是通常很少用到它的稍微高级一点的画图功能.这里介绍一些高级渲染功能和画图技巧,先看结果. ...

  6. 计算机组装图纸手画,原神玩家为造家园能有多拼?工科大佬直接画出图纸,成品效果惊人...

    在<原神>1.5版本更新后,提瓦特大陆上顿时掀起了一波装修浪潮,不知大家把自己的家园布置得怎样了呢?反正雪奈我可是好好地肝了一番,并将海岛的那块"荒地"成功改造成了现在 ...

  7. 通过SVG进行画出雷达扫描图

    <?xml version="1.0" encoding="utf-8" standalone="no"?> <!DOCT ...

  8. jQuery UI 配合 icon 设计出 gif 动态图效果

    2014-04-21 15:15 的草稿,很早之前的菜鸟入门时学会的东西,我也忘了是原创还是转载的,毕竟年代久远了.嗯,能帮上忙就好-- 需要使用到的知识: jQuery UI的 Color Anim ...

  9. 街机扫描线Super_正式版_DIY街机怀旧神器_液晶屏秒变CRT显示器_多种扫描效果无限接近CRT屏怀旧DIY神器__不花钱一样体验CRT_模拟街机荧屏CRT_液晶仿CRT足不出户体验CRT扫描效果

    新版本的 街机扫描线Super_正式版 已发布!在此,感谢支持过街机扫描线的朋友们,愿笑口常开! 街机扫描线Super_正式版_DIY街机神器液晶秒变CRT屏怀旧玩家必备 [最新_街机扫描线Super ...

最新文章

  1. MySQL优化篇:索引
  2. centos7升级php版本
  3. bzoj 2878 [Noi2012]迷失游乐园——树上的期望dp
  4. Shadow Mapping 的原理与实践 【转】
  5. 【译】Deep Learning with Knowledge Graphs
  6. ecshop清除mysql缓存_ECSHOP缓存清理关闭教程
  7. 老李分享:持续集成学好jenkins之Git和Maven配置
  8. 一个简单的中文自动转拼音
  9. 赛门铁克第三财季运营业绩稳步增长
  10. ACM PKU 1019 Number Sequence http://acm.pku.edu.cn/JudgeOnline/problem?id=1019
  11. PARDISO 5.0.0 Solver Project
  12. 计算机键盘如何打字课件,电脑键盘打字入门基础.ppt
  13. 传奇服务端GOM引擎和GEE引擎区别在哪里?
  14. 确定互异字符(编程基础)
  15. 素数and约数and反素数
  16. java 重载与重写 【转】
  17. MATLAB libsvm 安装和使用
  18. iframe中碰到的问题及解决方法
  19. 一个大一的迷茫小菜鸟
  20. [翁恺老师 城堡游戏(无bug

热门文章

  1. 电脑鸿蒙系统怎么连接无线网,电脑新装了系统,连接不上WiFi,怎么处理?
  2. Android 根目录listFiles()文件列表返回值为null
  3. 自然语言处理课程总结_CodingPark编程公园
  4. 账号由大小写字母+数字+特殊字符组成 正则表达
  5. JS实现复制截图,自动显示图片,并上传图片到后端,源码自取
  6. RISC-V SiFive U54内核——CLINT中断控制器
  7. 机器学习之逻辑斯蒂回归
  8. 校招 | 乾象投资2023校园招聘
  9. 西门子博图功能指令(反序列化)
  10. MinGW-w64 - for 32 and 64 bit Windows