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

#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;//防止一条边为0glViewport(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;
}

运行效果


                        

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/705186.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

亚马逊巨头都在用的自养号大法,赶快get!

随着时间的推移&#xff0c;越来越多做亚马逊生意的朋友开始意识到自养号的重要性。拥有自养号意味着掌握了一手资源&#xff0c;这种自主性让人感到更安全。高权重的买家号可以享有更多的操作权限&#xff0c;也能获得更好的效果。然而&#xff0c;要想成功地养好自养号并不是…

mybatis---->tx中weekend类

&#x1f64c;首先weekend可不是mybatis中的类呦~~&#x1f64c; 它是来自于mybatis的一个扩展库&#xff01; 如果你要在springboot中使用&#xff0c;需要引入以下依赖~~ <dependency><groupId>tk.mybatis</groupId><artifactId>mapper-spring-boot…

滥用生成式人工智能的安全威胁的应对

文章目录 前言一、生成式人工智能滋生了恶意大模型的新威胁(一)对维护国家安全提出新挑战(二)对行业应用创新造成新冲击(三)对生产生活方式带来新威胁二、生成式人工智能安全治理难点(一)包容审慎存在失衡,政策尺度有待细化(二)协同治理能力不足,联动合力有待提升(…

蓝桥杯刷题1

目录 1. 平方和 2. 门牌制作 3. 卡片 4. 分数 5. 星期一 6. 顺子日期 1. 平方和 题目描述&#xff1a;小明对数位中含有2、0、1、9 的数字很感兴趣&#xff0c;在1 到40 中这样的数包 括1、2、9、10 至32、39 和40&#xff0c;共28 个&#xff0c;他们的和是574&#x…

Netty权威指南——基础篇2(NIO编程)

1 概述 与Socket类和ServerSocket&#xff0c;NIO也提供了SocketChannel和ServerSocketChannel两种不同的套接字通道实现。这两种新增的通道都支持阻塞和非阻塞两种模式。阻塞模式使用简单&#xff0c;但性能和可靠性都不好&#xff0c;非阻塞模式则正好相反。一般来说&#xf…

python Matplotlib Tkinter-->导出pdf报表

环境 python:python-3.12.0-amd64 包: matplotlib 3.8.2 reportlab 4.0.9 import matplotlib.pyplot as plt from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2Tk import tkinter as tk import tkinter.messagebox as messagebox impor…

你知道哪里有Alzet购买吗?

Alzet Osmotic Pumps 是 ALZA 公司于二十世纪七十年代发明的一种用于体内药物缓释的工具。ALZA公司是一家著名的药物研发公司&#xff0c;由其研发的 Alzet 植入式胶囊渗透压泵一开始是用于公司内部和相关科研机构做药物测试用的&#xff0c;但是不久之后&#xff0c;由于渗透压…

46.仿简道云公式函数实战-文本函数-CHAR

1. CHAR函数 函数可将计算机其他类型的数字代码转换为字符。 2. 函数用法 CHAR(number) CHAR 函数可将计算机其他类型的数字代码转换为字符。 Number&#xff1a;用于指定字符的数字。 3. 函数示例 CHAR(10)&#xff0c;即返回值为换行字符"\n"。 目前仿简道…

电脑背景图片怎么设置?这个方法让你一目了然

电脑背景图片的设置是个性化电脑桌面的重要步骤之一。一张美观的背景图片不仅可以为电脑带来视觉愉悦&#xff0c;还能反映个人品味和风格。在本文中&#xff0c;我们将介绍电脑背景图片的设置方法&#xff0c;共包括三种方式&#xff0c;通过分步骤详细说明&#xff0c;帮助用…

【重温设计模式】适配器模式及其Java示例

【重温设计模式】适配器模式及其Java示例 适配器模式的介绍 在软件开发的世界里&#xff0c;设计模式如同是我们的罗盘&#xff0c;指引着我们在复杂的代码海洋中航行。而其中的适配器模式&#xff0c;就如同是我们手中的万能钥匙&#xff0c;让我们能够灵活应对各种各样的设…

解决Maven爆红以及解决 Idea 卡在 Resolving问题

关于 Idea 卡在 Resolving&#xff08;前提是Maven的setting.xml中配置好了阿里云和仓库&#xff09; 参考文章https://blog.csdn.net/jiangyu1013/article/details/95042611 解决Maven爆红参考文章https://devpress.csdn.net/beijing/656d993b76f0791b6eca7bb0.html?dp_toke…

IP 电话

1 IP 电话概述 IP 电话是在互联网上传送多媒体信息。 多个英文同义词&#xff1a; VoIP (Voice over IP) Internet Telephony VON (Voice On the Net) 1.1 狭义的和广义的 IP 电话 狭义的 IP 电话&#xff1a;指在 IP 网络上打电话。 广义的 IP 电话&#xff1a;不仅仅是…

路由器端口映射如何配置?

在网络通信中&#xff0c;路由器是一个重要的设备&#xff0c;它负责将数据包从一个网络传输到另一个网络。路由器的端口映射配置是一种重要的设置&#xff0c;可以使外部网络中的计算机通过访问路由器上的特定端口与内部网络中的计算机进行通信。本文将介绍什么是路由器端口映…

24考研成绩查询时间已公布!附最全查分攻略!

2月26日早上9点起&#xff01; 2024考研初试成绩即将公布&#xff01; 考研初试成绩即将公布&#xff0c;同学们都在紧张地期待着自己的成绩。不同院校的成绩查询入口开通时间有所不同&#xff0c;具体时间请大家查看各自官网的通知。 成绩在哪查&#xff1f;怎么查&#xff1…

ASP.NET MVC中使用Autofac依赖注入

ASP.NET MVC中使用Autofac依赖注入 官网文档&#xff1a;MVC — Autofac 7.0.0 documentation 2024年02月26日在.net 4.8 framework 建立的MVC项目中测试通过 引入NUGET包&#xff1a;Autofac和Autofac.Mvc5 Global中加入以下代码&#xff1a; //autofac注入ContainerBuild…

【力扣 - 爬楼梯】

题目描述 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢&#xff1f; 方法一&#xff1a;动态规划 思路和算法 我们用 f(x) 表示爬到第 x 级台阶的方案数&#xff0c;考虑最后一步可能跨了一级台阶&#…

LeetCode_Java_转变日期格式、种花问题(题目+思路+代码)

目录 1507. 转变日期格式 605.种花问题 1507. 转变日期格式 给你一个字符串 date &#xff0c;它的格式为 Day Month Year &#xff0c;其中&#xff1a; Day 是集合 {"1st", "2nd", "3rd", "4th", ..., "30th", "3…

Qt篇——QTableWidget保存表格数据到Excel文件中

代码如下&#xff1a; &#xff08;pro文件中添加QT axcontainer&#xff09; #include <QAxObject>void MainWindow::saveTableToExcel() {QDateTime current_date_time QDateTime::currentDateTime();QString excelName "data_" current_date_time.toSt…

Mysql 高可用解决方案

1.环境说明 操作系统&#xff1a;centos7.7 主服务器&#xff1a;node2(192.168.1.102) 从服务器&#xff1a;node3(192.168.1.103) keepalived中虚拟ip(VIP):192.168.1.100 2.准备事项 主库和从库数据库的版本一致把主库的数据同步给从库一份 3.主库配置 3.1 编辑MySQL配…

ETL是什么

一、ETL概念 ETL&#xff0c;是英文Extract-Transform-Load的缩写&#xff0c;用来描述将数据从来源端经过抽取&#xff08;extract&#xff09;、转换&#xff08;transform&#xff09;、加载&#xff08;load&#xff09;至目的端的过程。ETL一词较常用在数据仓库&#xff…