位置: 编程技术 - 正文

搭建Qt下的OpenGL编程框架(qt配置opengl)

编辑:rootadmin

推荐整理分享搭建Qt下的OpenGL编程框架(qt配置opengl),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:qt5 opengl,qt中opengl widget用法,qt opengl教程,qt5 opengl,qt+opengl,qt openglwidget,qt配置opengl,qt配置opengl,内容如对您有帮助,希望把文章链接给更多的朋友!

转载: 提要

在前面的一篇文章我们已经配置好了opengl的编程环境,今天要做的就是搭建一个Qt的编程框架,方便后面的学习。这一节会涉及到一些OpenGL的基础方法,多用手册和搜索引擎去理解。

二、 框架结构

项目的结构如下图。

主要的思路是:mainwindow类用来处理程序的逻辑和交互,nehewidget是继承QGLWidget的,用来绘制Opengl。在.pro文件中一定要加入QT&#;= opengl,还有喔没有使用QtCreater的ui编辑功能。

QGLWidget中最重要的三个方法是:

paintGL() -渲染OpenGL场景,当窗口需要刷新的时候就会被调用 .

resizeGL() -设置OpenGL的视口和一些属性,当窗口改变大小和窗口被创建的时候被调用。resizeGL()在处理完后会自动刷新屏幕。

initializeGL() -设置OpenGL的渲染环境,定义显示选项,当resizeGL() 或 paintGL()第一次运行的时候被调用。

二、 框架实现

main.cpp没有做任何改动。

#include <QtGui/QApplication>#include "mainwindow.h"int main(int argc, char *argv[]){ QApplication a(argc, argv); MainWindow w; w.show(); return a.exec();}

mainwindow.h

搭建Qt下的OpenGL编程框架(qt配置opengl)

将nehewidget作为自己的一个私有变量,并定义键盘事件。

#ifndef MAINWINDOW_H#define MAINWINDOW_H#include <QtGui/QMainWindow>#include <QKeyEvent>#include "nehewidget.h"class MainWindow : public QMainWindow{ Q_OBJECTpublic: MainWindow(QWidget *parent = 0); ~MainWindow();protected: bool fullscreen; //处理键盘事件 void keyPressEvent( QKeyEvent *e );private: NeHeWidget *neheWidget ;};#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent){ neheWidget = new NeHeWidget(); fullscreen = true; setGeometry(,,,); setWindowTitle(tr("NeHe's OpenGL Framework")); setCentralWidget(neheWidget);}MainWindow::~MainWindow(){}void MainWindow::keyPressEvent(QKeyEvent *e){ switch ( e->key() ) { case Qt::Key_F2: fullscreen = !fullscreen; if ( fullscreen ) { showFullScreen(); } else { showNormal(); } neheWidget->updateGL(); break; case Qt::Key_Escape: close(); break; }}

nehewidget.h

#ifndef NEHEWIDGET_H#define NEHEWIDGET_H#include <QGLWidget>#include <QtGui>#include <QtOpenGL>class NeHeWidget : public QGLWidget{ Q_OBJECTpublic: explicit NeHeWidget(QWidget *parent = 0); ~NeHeWidget();protected: //设置渲染环境 void initializeGL(); //绘制窗口 void paintGL(); //响应窗口的大小变化 void resizeGL( int width, int height );};#endif // NEHEWIDGET_H

nehewidget.cpp

#include "nehewidget.h"NeHeWidget::NeHeWidget(QWidget *parent) : QGLWidget(parent){}NeHeWidget::~NeHeWidget(){}void NeHeWidget::initializeGL(){ // 启用阴影平滑 glShadeModel( GL_SMOOTH ); // 黑色背景 glClearColor( 0.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 NeHeWidget::paintGL(){ // 清除屏幕和深度缓存 glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); glLoadIdentity(); //坐标转移 glTranslatef(-1.5f,0.0f,-6.0f); //设置颜色 glColor3f( 1.0, 1.0, 1.0 ); //绘制一个正方形 glBegin( GL_QUADS ); glVertex3f( -1.0, 1.0, 0.0 ); glVertex3f( 1.0, 1.0, 0.0 ); glVertex3f( 1.0, -1.0, 0.0 ); glVertex3f( -1.0, -1.0, 0.0 ); glEnd();} // 重置OpenGL窗口大小void NeHeWidget::resizeGL(int width, int height){ // 防止窗口大小变为0 if ( height == 0 ) { height = 1; } // 重置当前的视口 glViewport( 0, 0, (GLint)width, (GLint)height ); // 选择投影矩阵 glMatrixMode( GL_PROJECTION ); // 重置投影矩阵 glLoadIdentity(); // 设置视口的大小 gluPerspective( .0, (GLfloat)width/(GLfloat)height, 0.1, .0 ); // 选择模型观察矩阵 glMatrixMode( GL_MODELVIEW ); glLoadIdentity();}

三、程序说明

F2用于全屏显示,ESC退出,程序绘制了一个正方形,且改变窗口大小,图形会按比例改变。

OpenGL的一些初始化函数就一一解释了,注释里面有一些信息,以后遇到的话再仔细解释。

框架搭建好之后学习我们主要去修改void NeHeWidget::paintGL()就可以了实现相应的效果了。

opengl GLSL 学习 随笔三 1、类型修饰符const表示该变量为常量,只读;in表示该变量是一个输入在当下的shaderstage;out表示该变量是一个输出在当下的shaderstage;uniform表示该变量

opengl GLSL基本语法 学习 随笔二 1、首先介绍一下GLSL的数据类型,如果你学过c,那么一定不会陌生。floatdoubleintuintbool型几个数据类型;基本上从字面上就能理解这几个数据类型的含义。

Begin OpenGL with Python-1st Day,draw a simple sample. 某个老板忽然有一天想到要画3D图,于是作者遭殃了……OK,首先需要Python和pyopengl……然后需要一块支持OpenGL的显卡,我不是开玩笑,我第一个程序夭

标签: qt配置opengl

本文链接地址:https://www.jiuchutong.com/biancheng/373172.html 转载请保留说明!

上一篇:在OpenGL中给场景添加光照(opengl sphere)

下一篇:opengl GLSL 学习 随笔三(opengl glu)

  • 跨年度调整税金及附加
  • 哪些税不用通过应交税费
  • 印花税申报缴纳错误,怎么办
  • 工商年报纳税总额怎么算
  • 发票未到已验收什么意思
  • 2019一般纳税人新政策
  • 招标文件费属于哪类税收编码
  • 员工一次性补偿要缴纳个税吗
  • 残疾人士有哪些
  • 自然人转让股权给自己的公司
  • 个人垫付费用报销申请怎么写
  • 事业单位非税收入包括哪些
  • 固定资产的知识
  • 摊销房租账务处理
  • 跨地区预缴税款需缴纳哪些
  • 非独立核算的分公司是法人主体吗
  • 进项税和销项税怎么区分
  • 小规模纳税人开专票税率是1%还是3%
  • 企业完税凭证入账后怎么办理退税?
  • 公司住宿费用记什么费用
  • 企业所得税如何缴纳
  • 小规模纳税人咨询服务费税率是多少
  • 发票丢失罚款标准要看金额吗
  • 公司没有进出口权 如何进行业务
  • 收到汽车报废补贴怎么做账?
  • 现金比率计算公式含义
  • mac如何在桌面显示我的电脑
  • php require的用法
  • 企业所得税会计利润
  • lmgrd.exe是什么进程
  • 企业合并分立
  • 北坡镇人民政府
  • 小帽科技
  • php公众号开发框架
  • 帝国cms模板文件在哪
  • 交易性金融资产的入账价值
  • 一般纳税人企业所得税税率2023
  • 兼职费用怎么入账报销
  • 运输公司税务筹划
  • 一般纳税人公司出售旧车怎么开票
  • 递延所得税资产和负债怎么计算
  • sqlserver实现离散组合算法
  • 收到承兑汇票在什么科目
  • 企业所得税季度平均值怎么算
  • 从业人数的计算方法
  • 纳税人将购买的货物分配给股东,因该货物购买时已缴纳
  • 会计物料超损费怎么算
  • 汇算清缴前取得发票可以税前扣除吗
  • 红冲上一年度销售收入
  • 试算平衡表的编制方法
  • 货物破损怎么写会计分录
  • 公司现金支票取现要缴税吗
  • 负数发票跨月怎么作废
  • 事业单位不允许办企业是哪个文件要求的
  • 销售废旧物资如何入账
  • 融资租赁怎么开收据
  • sql拆分函数
  • sql server数据库监控
  • mysql5.7最新版
  • centos sh
  • freebsd常用命令
  • win10睡眠什么意思
  • centos6开机启动
  • SSSvr.exe - SSSvr是什么进程
  • win10虚拟机无法安装
  • Win10计算机管理该文件没有与之关联的应用
  • 宽带连接找不到设备是怎么回事
  • 在bootstrap中,有哪几种导航
  • 可以自己做手写的软件
  • perl中\s+
  • nodejs image
  • nodejs连接mongodb副本集
  • 批处理中copy怎么用
  • python functools.wraps
  • js字段截取
  • 国家税务局级别排名
  • 黑龙江省税务局领导最新分工
  • 镇江市税务局官网
  • 普通发票开具时写材料一批需要附什么清单?
  • 临汾的公司需要交社保吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设