赞
踩
一,安装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
- #ifndef GLWIDGET_H
- #define GLWIDGET_H
- #include<QtOpenGL>
- #include<QWidget>
- namespace Ui{
- class GLWidget;
- }
- class GLWidget : public QGLWidget
- {
- Q_OBJECT
- public:
- explicit GLWidget(QGLWidget *parent = 0);
- ~GLWidget();
- protected:
- void initializeGL(); //初始化OpenGL窗口部件
- void paintGL(); //绘制整个OpenGL窗口,只要有更新发生,这个函数就会被调用
- void resizeGL(int width,int height); //处理窗口大小变化事件的,参数是新状态下的宽和高
- void keyPressEvent(QKeyEvent *e); //鼠标处理函数
- protected:
- bool fullscreen; //判断是否全屏的变量
- private:
- Ui::GLWidget *ui;
- };
- #endif // GLWIDGET_H
glwidget.cpp
- #include"glwidget.h"
- #include"ui_glwidget.h"
- #include<QtGui>
- #include<QtCore>
- #include<QtOpenGL>
-
-
-
- GLWidget::GLWidget(QGLWidget *parent) :QGLWidget(parent),ui(new Ui::GLWidget)
- {
- ui->setupUi(this);
- fullscreen = false;
- }
-
- //这是对虚函数,这里是重写该函数
-
- void GLWidget::initializeGL()
- {
-
- setGeometry(300, 200, 640,480);//设置窗口初始位置和大小
-
- glShadeModel(GL_FLAT);//设置阴影平滑模式
-
- glClearColor(0.0, 0.0,0.0, 0);//改变窗口的背景颜色
-
- glClearDepth(1.0);//设置深度缓存
-
- glEnable(GL_DEPTH_TEST);//允许深度测试
-
- glDepthFunc(GL_LEQUAL);//设置深度测试类型
-
- glHint(GL_PERSPECTIVE_CORRECTION_HINT,GL_NICEST);//进行透视校正
-
- }
-
-
-
- void GLWidget::paintGL()
- {
-
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
- glLoadIdentity();
- //renderText(10,20,"Hello,My Dear");
-
- // glColor3f(1.0, 0.0,0.0);
- /*
- glBegin(GL_TRIANGLES);
- glVertex3f(0.0, 1.0,0.0);
- glVertex3f(-1.0, -1.0,0.0);
- glVertex3f(1.0, -1.0,0.0);
- glEnd();*/
-
- glBegin(GL_TRIANGLES);
- glColor3f(1.0f, 0.0f,0.0f);
- glVertex3f(0.0f,1.0f, 0.0f);
- glColor3f(0.0f, 1.0f,0.0f);
- glVertex3f(-1.0f,-1.0f, 0.0f);
- glColor3f(0.0f, 0.0f,1.0f);
- glVertex3f(1.0f,-1.0f, 0.0f);
- glEnd();
- renderText(20, 100,"Hello Jcy, My first OpenGL app.");
- }
-
-
-
- //该程序是设置opengl场景透视图,程序中至少被执行一次(程序启动时).
-
- void GLWidget::resizeGL(int width, int height)
- {
- if(0 == height)
- height = 1;//防止一条边为0
- glViewport(0, 0,(GLint)width, (GLint)height);//重置当前视口,本身不是重置窗口的,只不过是这里被Qt给封装好了
- glMatrixMode(GL_PROJECTION);//选择投影矩阵
- glLoadIdentity();//重置选择好的投影矩阵
- // gluPerspective(45.0,(GLfloat)width/(GLfloat)height, 0.1, 100.0);//建立透视投影矩阵
- // glMatirxMode(GL_MODELVIEW);//以下2句和上面出现的解释一样
- glLoadIdentity();
- }
-
-
-
- void GLWidget::keyPressEvent(QKeyEvent *e)
- {
- switch(e->key())
- {
- //F1键为全屏和普通屏显示切换键
-
- case Qt::Key_F1:
- fullscreen =!fullscreen;
- if(fullscreen)
- showFullScreen();
- else
- {
- setGeometry(300, 150, 640, 480);
- showNormal();
- }
-
- updateGL();
- break;
- //Ese为退出程序键
- case Qt::Key_Escape:
- close();
- }
-
- }
-
- GLWidget::~GLWidget()
- {
- delete ui;
- }
-
运行效果
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。