当前位置:   article > 正文

ubuntu+QT+ OpenGL环境搭建和绘图

ubuntu+QT+ OpenGL环境搭建和绘图

一,安装OpenGL
安装OpenGL依赖项:运行sudo apt install libgl1-mesa-glx命令安装OpenGL所需的一些依赖项。

安装OpenGL头文件:运行sudo apt install libgl1-mesa-dev命令来安装OpenGL的头文件。

安装GLUT库:GLUT(OpenGL Utility Toolkit)是一个方便的库,提供了用于创建OpenGL应用程序的实用工具函数。运行sudo apt install freeglut3-dev命令来安装GLUT库。

安装GLEW库:GLEW(OpenGL Extension Wrangler)是一个库,提供了方便的函数和宏,用于在OpenGL应用程序中访问扩展和函数。运行sudo apt install libglew-dev命令来安装GLEW库。


编译和链接OpenGL程序:写完OpenGL程序,你g++ application.cpp -o application `pkg-config --cflags --libs opengl`使用以下命令来编译和链接。

二,新建qt下openGL工程

需要在.pro文件中添加QT += opengl

glwidget.h

  1. #ifndef GLWIDGET_H
  2. #define GLWIDGET_H
  3. #include<QtOpenGL>
  4. #include<QWidget>
  5. namespace Ui{
  6. class GLWidget;
  7. }
  8. class GLWidget : public QGLWidget
  9. {
  10. Q_OBJECT
  11. public:
  12. explicit GLWidget(QGLWidget *parent = 0);
  13. ~GLWidget();
  14. protected:
  15. void initializeGL(); //初始化OpenGL窗口部件
  16. void paintGL(); //绘制整个OpenGL窗口,只要有更新发生,这个函数就会被调用
  17. void resizeGL(int width,int height); //处理窗口大小变化事件的,参数是新状态下的宽和高
  18. void keyPressEvent(QKeyEvent *e); //鼠标处理函数
  19. protected:
  20. bool fullscreen; //判断是否全屏的变量
  21. private:
  22. Ui::GLWidget *ui;
  23. };
  24. #endif // GLWIDGET_H

glwidget.cpp

  1. #include"glwidget.h"
  2. #include"ui_glwidget.h"
  3. #include<QtGui>
  4. #include<QtCore>
  5. #include<QtOpenGL>
  6. GLWidget::GLWidget(QGLWidget *parent) :QGLWidget(parent),ui(new Ui::GLWidget)
  7. {
  8. ui->setupUi(this);
  9. fullscreen = false;
  10. }
  11. //这是对虚函数,这里是重写该函数
  12. void GLWidget::initializeGL()
  13. {
  14. setGeometry(300, 200, 640,480);//设置窗口初始位置和大小
  15. glShadeModel(GL_FLAT);//设置阴影平滑模式
  16. glClearColor(0.0, 0.0,0.0, 0);//改变窗口的背景颜色
  17. glClearDepth(1.0);//设置深度缓存
  18. glEnable(GL_DEPTH_TEST);//允许深度测试
  19. glDepthFunc(GL_LEQUAL);//设置深度测试类型
  20. glHint(GL_PERSPECTIVE_CORRECTION_HINT,GL_NICEST);//进行透视校正
  21. }
  22. void GLWidget::paintGL()
  23. {
  24. glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
  25. glLoadIdentity();
  26. //renderText(10,20,"Hello,My Dear");
  27. // glColor3f(1.0, 0.0,0.0);
  28. /*
  29. glBegin(GL_TRIANGLES);
  30. glVertex3f(0.0, 1.0,0.0);
  31. glVertex3f(-1.0, -1.0,0.0);
  32. glVertex3f(1.0, -1.0,0.0);
  33. glEnd();*/
  34. glBegin(GL_TRIANGLES);
  35. glColor3f(1.0f, 0.0f,0.0f);
  36. glVertex3f(0.0f,1.0f, 0.0f);
  37. glColor3f(0.0f, 1.0f,0.0f);
  38. glVertex3f(-1.0f,-1.0f, 0.0f);
  39. glColor3f(0.0f, 0.0f,1.0f);
  40. glVertex3f(1.0f,-1.0f, 0.0f);
  41. glEnd();
  42. renderText(20, 100,"Hello Jcy, My first OpenGL app.");
  43. }
  44. //该程序是设置opengl场景透视图,程序中至少被执行一次(程序启动时).
  45. void GLWidget::resizeGL(int width, int height)
  46. {
  47. if(0 == height)
  48. height = 1;//防止一条边为0
  49. glViewport(0, 0,(GLint)width, (GLint)height);//重置当前视口,本身不是重置窗口的,只不过是这里被Qt给封装好了
  50. glMatrixMode(GL_PROJECTION);//选择投影矩阵
  51. glLoadIdentity();//重置选择好的投影矩阵
  52. // gluPerspective(45.0,(GLfloat)width/(GLfloat)height, 0.1, 100.0);//建立透视投影矩阵
  53. // glMatirxMode(GL_MODELVIEW);//以下2句和上面出现的解释一样
  54. glLoadIdentity();
  55. }
  56. void GLWidget::keyPressEvent(QKeyEvent *e)
  57. {
  58. switch(e->key())
  59. {
  60. //F1键为全屏和普通屏显示切换键
  61. case Qt::Key_F1:
  62. fullscreen =!fullscreen;
  63. if(fullscreen)
  64. showFullScreen();
  65. else
  66. {
  67. setGeometry(300, 150, 640, 480);
  68. showNormal();
  69. }
  70. updateGL();
  71. break;
  72. //Ese为退出程序键
  73. case Qt::Key_Escape:
  74. close();
  75. }
  76. }
  77. GLWidget::~GLWidget()
  78. {
  79. delete ui;
  80. }

运行效果


                        

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/160743
推荐阅读
相关标签
  

闽ICP备14008679号