openGL-输入点并显示

18 篇文章 2 订阅

综述

没有任何技术含量,只是做一个备份。方便自己查阅。

代码


#include <GLUT/GLUT.h>
#include <iostream>
#include <string>
#include <vector>
#include <iomanip>
#include <fstream>
using namespace std;
ofstream outfile;
string path = "/Users/frankdura/Desktop/myfile.txt";
struct Point{
    //定义点的结构体,主要用于编码
    float x,y;
    int code;
};
vector<float> con_x,con_y;
vector<float> con_x2,con_y2;
int window_size=600;           //这是我们显示界面的大小

void InitEnvironment()
{
    //一些初始化操作
    glClearColor(0.0,0.0,0.0,0);
    glClear(GL_COLOR_BUFFER_BIT);
    glPointSize(4);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    gluOrtho2D(0,window_size,0,window_size);
}

void drawpoints(float x, float y,int red,int blue,int green){
    glColor3f(red,blue,green);
    glBegin(GL_POINTS);
    glVertex2f(x, window_size-y);
    cout << x << "  " << y<< endl;
    glEnd();
    glFlush();
}
void init_Display(void)
{
    glClear(GL_COLOR_BUFFER_BIT);
    // 首先绘制裁剪区域
    glColor3f(0.98f, 0.625f, 0.12f);
    //刷新队列
    //在内部,openGL的命令和语句常常等待在队列里
    //直到openGL驱动程序同时处理几个“命令”
    glFlush();
    for (int i = 0; i < con_x.size() ; ++i) {
//        cout << con_x[i] <<"  "<<con_y[i] << endl;
        drawpoints(con_x2[i],con_y2[i],1,0,1);
    }
    for (int i = 0; i < con_x.size() ; ++i) {
//        cout << con_x[i] <<"  "<<con_y[i] << endl;
        drawpoints(con_x[i],con_y[i],1,1,0);
    }


}


void OnMouse(int button,int state,int x,int y)
{
//    if(button==GLUT_LEFT_BUTTON&&state==GLUT_DOWN)
//    {
//            glColor3f(1,0,0);
//            glBegin(GL_POINTS);
//            glVertex2f(x, window_size-y);
//            cout << x << "  " << y<< endl;
//            glEnd();
//            glFlush();
//    }
}

int main(int argc, char *argv[])
{
    cout << "begin!"<<endl;
    float x,y;
    while(cin>>x>> y && x!=0){

        con_x.push_back(x);
        con_y.push_back(y);
    }
    cout << "read!" << con_x.size() << endl;
    while(cin>>x >> y&&x!=0){
        con_x2.push_back(x);
        con_y2.push_back(y);
    }
    cout << "read2!over" << endl;
    glutInit(&argc, argv);   //初始化GLUT
    glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
    glutInitWindowPosition(300, 100);
    glutInitWindowSize(window_size, window_size);
    glutCreateWindow("show_point");
    InitEnvironment();   //初始化
    glutMouseFunc(&OnMouse);  //注册鼠标事件
    glutDisplayFunc(&init_Display);   //回调函数
    glutMainLoop();    //持续显示,当窗口改变会重新绘制图形
    return 0;
}




  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Qt和OpenGL通常被用于创建交互式的图形用户界面(GUI)应用程序。雷达显示是一种常见的应用场景,它用于显示和跟踪雷达探测到的目标。 使用Qt和OpenGL来实现雷达显示可以使界面更加美观,并且具有良好的可定制性和交互性。下面是一个简单的实现步骤: 1. 首先,在Qt创建一个OpenGL窗口或OpenGL小部件,作为雷达显示的主界面。 2. 加载雷达数据:通过读取雷达数据文件或者通过与雷达设备进行通信,获取雷达探测到的目标信息。 3. 数据处理和坐标转换:对于雷达数据,可能需要做一些数据处理,例如通过滤波、降噪或者目标追踪算法来提取有用的信息。接着,将目标的坐标转换为界面上的像素坐标,以便在OpenGL窗口进行显示。 4. 绘制雷达图像:使用OpenGL提供的2D和3D绘图功能,将处理后的雷达数据以合适的方式绘制来。可以使用不同的图形元素(例如、线和多边形)来表示不同的雷达目标,这取决于雷达数据本身的特显示需求。 5. 实时更新:如果要实现实时雷达显示,需要定时更新雷达数据,并及时刷新OpenGL窗口以显示最新的目标信息。可以使用Qt的定时器功能来实现这个功能。 6. 交互功能:如果需要与雷达显示进行交互,例如通过鼠标或键盘对雷达图像进行缩放、平移或者旋转,可以通过Qt的事件处理机制来捕获用户的输入,并进行相应的处理。 总之,使用Qt和OpenGL来实现雷达显示可以提供强大的图形处理和渲染能力,能够更好地展示雷达数据,同时也可以根据实际需要自定义界面和交互功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值