上班之余抽点时间出来写写博文,希望对新接触的朋友有帮助。今天在这里和大家一起学习一下纹理窗口

NeNe的代码中是加载到了一个正方体当中,代码很长。其实单纯的想要纹理贴图是很便利的。具体的纹理贴图技巧在NeNe的书中的有很具体的分析。

.h文件:

#ifndef PICGLWIDGET_H
#define PICGLWIDGET_H#include <QtGui/QWidget>
#include <QWidget>
#include <QtOpenGL>
#include <GL/GLU.h>
#include <gl/gl.h>class PicGLWidget : public QGLWidget
{Q_OBJECTpublic:explicit PicGLWidget(QWidget *parent = 0);~PicGLWidget();protected:void loadGLTextures ();void initializeGL();  //初始化OpenGL窗口部件void paintGL();  //绘制整个OpenGL窗口,只要有更新发生,这个函数就会被调用void resizeGL(int width, int height); //处置窗口巨细变更事件的,参数是新状态下的宽和高void keyPressEvent(QKeyEvent *e);  //鼠标处置函数protected:bool fullscreen;  //判断是不是全屏的变量float Zyot;GLuint texture[1];
};#endif // PICGLWIDGET_H

.cpp文件:

每日一道理
人生是洁白的画纸,我们每个人就是手握各色笔的画师;人生也是一条看不到尽头的长路,我们每个人则是人生道路的远足者;人生还像是一块神奇的土地,我们每个人则是手握农具的耕耘者;但人生更像一本难懂的书,我们每个人则是孜孜不倦的读书郎。
#include "picglwidget.h"PicGLWidget::PicGLWidget(QWidget *parent): QGLWidget(parent)
{fullscreen = false;Zyot = -10.0f;
}void PicGLWidget::initializeGL()
{setGeometry(300, 150, 500, 500);//设置窗口初始位置和巨细loadGLTextures();glEnable(GL_TEXTURE_2D);//启用纹理glShadeModel(GL_SMOOTH);//设置阴影平滑模式glClearColor(0.0, 0.0, 0.0, 0.5);//转变窗口的背景颜色glClearDepth(1.0);//设置深度缓存glEnable(GL_DEPTH_TEST);//答应深度测试glDepthFunc(GL_LEQUAL);//设置深度测试类型glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);//停止透视校正glBlendFunc(GL_SRC_ALPHA, GL_ONE);//源像素因子采取alpha通道值,目标像素因子采取1.0glEnable(GL_BLEND);
}void PicGLWidget::paintGL()
{glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);glLoadIdentity();glTranslatef(0.0, 0.0, Zyot);glBindTexture(GL_TEXTURE_2D, texture[0]);//绑定纹理目标glBegin(GL_QUADS);glTexCoord2f( 0.0, 0.0 ); glVertex3f( -1.0, -1.0,  1.0 );glTexCoord2f( 1.0, 0.0 ); glVertex3f(  1.0, -1.0,  1.0 );glTexCoord2f( 1.0, 1.0 ); glVertex3f(  1.0,  1.0,  1.0 );glTexCoord2f( 0.0, 1.0 ); glVertex3f( -1.0,  1.0,  1.0 );glEnd();
}void PicGLWidget::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);//建立透视投影矩阵glColor4f(1.0f, 1.0f, 1.0f, 0.5f);glBlendFunc(GL_SRC_ALPHA, GL_ONE);glMatrixMode(GL_MODELVIEW);//以下2句和下面出现的解释一样glLoadIdentity();
}void PicGLWidget::keyPressEvent(QKeyEvent *e)
{switch(e->key()){/*F1键为全屏和普通屏显示切换键*/case Qt::Key_F1:fullscreen = !fullscreen;if(fullscreen)showFullScreen();else{setGeometry(300, 150, 500, 500);showNormal();}updateGL();break;/*Ese为退出程序键*/case Qt::Key_Escape:close();}
}void PicGLWidget::loadGLTextures()
{QImage tex, buf;if(!buf.load("./images/2.bmp"))//这个时候因为debug没有在外面,所以图片文件夹就是本目录了{qWarning("Cannot open the image...");QImage dummy(128, 128, QImage::Format_RGB32);//当没找到所需打开的图片时,创建一副128*128巨细,深度为32位的位图dummy.fill(Qt::green);buf = dummy;}tex = convertToGLFormat(buf);//将Qt图片的格式buf转换成opengl的图片格式texglGenTextures(1, &texture[0]);//开拓3个纹理内存,索引指向texture[0]/*建立第一个纹理*/glBindTexture(GL_TEXTURE_2D, texture[0]);//将创建的纹理内存指向的内容绑定到纹理对象GL_TEXTURE_2D上,经过这句代码后,以后对//GL_TEXTURE_2D的操作的任何操作都同时对应与它所绑定的纹理对象glTexImage2D(GL_TEXTURE_2D, 0, 3, tex.width(), tex.height(), 0, GL_RGBA, GL_UNSIGNED_BYTE, tex.bits());//开始真正创建纹理数据glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);//当所显示的纹理比加载进来的纹理小时,采取GL_NEAREST的方法来处置//GL_NEAREST方式速度非常快,因为它不是真正的滤波,所以占用内存非常// 小,速度就快了glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);//当所显示的纹理比加载进来的纹理大时,采取GL_NEAREST的方法来处置
}PicGLWidget::~PicGLWidget()
{}

当然,你需要在pro文件中添加opengl。

文章结束给大家分享下程序员的一些笑话语录: 神灯新篇
一个程序员在海滩上发现了一盏神灯。他在灯上擦了几下,一个妖怪就从灯里跳出来说:“我是世界上法术最强的妖怪。我可以实现你的任何梦想,但现在,我只能满足你一个愿望。”程序员摊开了一幅中东地图说:“我想让中东得到永久的和平。”妖怪答道:“哦,我没办法。自打创世纪以来,那里的战火就没有停息过。这世上几乎没有我办不到的事,但这件事除外。”程序员于是说:“好吧,我是一个程序员,为许多用户编写过程序。你能让他们把需求表述得更清楚些,并且让我们的软件项目有那么一两次按进度按成本完成吗?”妖怪说:“唔,我们还是来看中东地图吧。”

转载于:https://www.cnblogs.com/jiangu66/archive/2013/05/13/3076839.html

纹理窗口Qt+OpenGL之纹理贴图相关推荐

  1. OpenGL(十九)——Qt OpenGL波动纹理(旗子的飘动效果)

    OpenGL(十九)--Qt OpenGL波动纹理(旗子的飘动效果) 一.场景 在日常的项目中,我们经常会实现波动的一些纹理效果,比如飘动的旗子,水的波纹,地图上某一点的波浪圈圈等...,本篇介绍波动 ...

  2. android纹理存储,Android:OpenGL存储纹理多长时间?

    openGL存储纹理多长时间? 离开活动时纹理内存是否会被回收? 例如,如果我有以下代码: mGL.glGenTextures(1, mTextures, 0); mGL.glBindTexture( ...

  3. OpenGL(十四)——Qt OpenGL纹理

    OpenGL(十四)--Qt OpenGL纹理 一.纹理 终于写到纹理的部分了: 纹理(Texture)的本质是一个2D图片(1D和3D),或者叫图形数据.只是在OpenGL中专业术语中称其为纹理. ...

  4. QT openGL 编程 笔记

    据说QT牛,特地花了一个晚上来研究研究.其实我也不想把自己搞得熊猫眼,只是碰到问题了精力就特好,想睡觉都不行.第一次尝试在LINUX下用OpenGL编程,实在是很兴奋,只是感觉碰了不少灰.一个问题从1 ...

  5. Qt OpenGL(二十)——Qt OpenGL 核心模式版本

    Qt OpenGL(二十)--Qt OpenGL 核心模式版本 一.写在前面 在之前的OpenGL教程(1~19)中,采用的方式都是固定渲染管线,也就是OpenGL3.2版本之前的写法,但是OpenG ...

  6. OpenGL(十八)——Qt OpenGL绘制一个3D世界

    OpenGL(十八)--Qt OpenGL绘制一个3D世界 一.说明 本篇介绍构建一个3D的世界. 二.简介 加载3D世界,并在其中漫游: 在这一课中,你将学会如何加载3D世界,并在3D世界中漫游. ...

  7. openCV读入图片,openGL实现纹理贴图

    本文结合结合openCV,openGL的优点,实现混合编程. (1)OpenCV提供图形处理和计算机视觉方面的通用算法,读入二维图片很方便: (2)OpenGL是跨平台的图形程序接口,它用于二维,三维 ...

  8. OpenGL立方体纹理贴图

    OpenGL正方体纹理贴图 0. 写在最前面 1. 正方体顶点属性构建 2. 绑定多个VAO.VBO 3. 创建多个纹理 4. 渲染循环 5. 实现代码 6. 多个立方体纹理贴图 0. 写在最前面 要 ...

  9. 手把手教会OpenGL之纹理贴图、包含纹理载入、纹理过滤、边界处理、纹理参数设置(入门级别案例,棋盘)

    一.OpenGL中纹理的加载(对glTexImage2D函数的使用) 二.纹理过滤(glTexParameteri参数中的GL_TEXTURE_MAG_FILTER与 GL_TEXTURE_MIN_F ...

最新文章

  1. Linux阶段总结shell脚本
  2. 安卓进阶系列-05列表控件(RecyclerView)的使用
  3. idea 运行单个main方法_IntelliJ IDEA 运行你的第一个Java应用程序 idea运行main方法
  4. 转: SMTP 服务器无法识别在 Mac 2011 Outlook 中发送电子邮件时错误。错误 17092...
  5. Eclipse快速创建Bottom Up类型的Web Service服务端
  6. eclipse中设置java注释模板
  7. blockquote 和 q 标签 css样式
  8. php yield 个人小解_PHP5.5新特性之yield理解与用法实例分析
  9. adb如何使用javac编译java程序并且运行
  10. 10天学会phpWeChat——第一天:核心框架的目录结构
  11. MySQL_DBA整理
  12. Altium Designer 10.0 使用教程
  13. c语言指针和数组的转换,指针和数组的转换
  14. 黑苹果快捷键修改_小米air13.3安装黑苹果教程
  15. 文件扩展名(后缀名)是什么?win10怎么显示扩展名?
  16. 太阳能计算机屏幕是什么材质,电脑显示器表面是什么材质的 什么是液晶玻璃...
  17. jdbc驱动加载失败
  18. openGL 深度测试与透明度设置
  19. win10换开始菜单工具ClassicShell
  20. 920C. Swap Adjacent Elements

热门文章

  1. linux gcc编译器误用-MM导致出现linker input file unused because linking not done
  2. gcc及doxygen的安装过程
  3. Java 替换字符串中的回车换行符的方法
  4. 【flink】Flink 1.12.2 源码浅析 : yarn-per-job模式解析 JobMasger启动 YarnJobClusterEntrypoint
  5. 【Elasticsearch】elasticsearch 查询 高亮
  6. 【ElasticSearch】es ResourceWatcherService 的 初始化 启动 源码解析
  7. 【SpringClould】SpringClould eureka 单机与集群搭建
  8. 【java】JMH微基准测试,报错Unable to find the resource: /META-INF/BenchmarkList
  9. 【java】两个线程如何交替执行,一个输出偶数一个输出奇数?
  10. Spark Structured SQL报错:Stream stream joins without equality predicate is not supported