没有合适的资源?快使用搜索试试~ 我知道了~
OpenGL中文教程-QT开发环境
需积分: 50 40 下载量 10 浏览量
2014-09-22
19:43:58
上传
评论 4
收藏 1.18MB PDF 举报
温馨提示
OpenGL中文教程-QT开发环境。在网上搜索了有关OpenGL 的教程,发现NeHe 的OpenGL 教程的还很不错,作者是NeHe。上面有很多种语言的实现,但是没有Qt 和Gtk 的,所以我就想着手写这个Qt OpenGL 教程,每课的内容和NeHe 是一样的。
资源详情
资源评论
资源推荐

Qt OpenGL 教程
最近一段时间除了学习 Qt,翻译 Qt 文档之外,由于工作和兴趣的原因,开始着
手看 Qt OpenGL 编程。在网上搜索了有关 OpenGL 的教程,发现 NeHe 的 OpenGL
教程的还很不错,作者是 NeHe。上面有很多种语言的实现,但是没有 Qt 和 Gtk
的,所以我就想着手写这个 Qt OpenGL 教程,每课的内容和 NeHe 是一样的。另
外,介绍 NeHe 的一个中文翻译站点 CSDN-CKer 翻译的 NeHe 的 OpenGL 教程,
翻译人是 CKer,在我学习这个教程的过程中,给了我很大的帮助。
下面就是 Qt OpenGL 教程的内容:
Qt OpenGL 的准备工作
第一课:创建一个 OpenGL 窗口
第二课:你的第一个多边形
第三课:上色
第四课:旋转
第五课:向三维进军
第六课:纹理映射
第七课:纹理滤波、光源和键盘控制
第八课:融合
第九课:在三维空间中移动位图
第十课:载入一个三维世界并在其中移动

第十一课:旗的效果(波动纹理)
第十二课:显示列表
第十三课:位图字体
第十四课:轮廓字体
第十五课:使用纹理映射的轮廓字体
第十六课:看起来很棒的雾
因为本教程是从 NeHe 的 OpenGL 教程迁移过来的,代码变为 Qt 实现的。所以
有的课程一时还没有实现成功,所以可能有些教程是跳跃的。
因本人时间有限,所以难免有错误出现,如果您发现了这些错误,或者有什么建
议,请来信指教,谢谢。
Qt OpenGL 的准备工作
因为 Qt 存在很多版本,另外它支持的平台也很多,到目前为止我只实验了几个
组合,所以就先把这些列出来吧,欢迎大家补充。
Unix/X11
Linux
Qt:自由版或者企业版都支持 OpenGL 模块,而专业版则不能。我现在使用的是
3.1.0 自由版和企业版。
gcc:编译器。我现在使用的是 3.2。
X:Linux 下的图形环境。我现在使用的是 4.2.0。
Mesa:自由的 OpenGL。我现在使用的是 5.0。

Windows
Qt:企业版支持 OpenGL 模块,而专业版则不能。我现在使用的是 3.1.0 企业版。
Microsoft Visual Studio:编译器。我现在使用的是 6.0。
创建一个 OpenGL 窗口
我假设您对 Qt 编程已经有了一定的了解,如果您还没有熟悉 Qt 编程,建议您先
学习一下 Qt 编程的基础知识。
Qt 中已经包含了 OpenGL 模块,具体情况您可以参考 Qt OpenGL 模块的相关内
容。

NeHeWidget 类
这就是我们继承 QGLWidget 类得到的 OpenGL 窗口部件类。
(由 nehewidget.h 展开。)
#include <qgl.h>
class NeHeWidget : public QGLWidget
{
Q_OBJECT
因为 QGLWidget 类被包含在 qgl.h 头文件中,所以我们的类就需要包含这个头文
件。Q_OBJECT 是 Qt 中的一个专用的宏,具体说明请参见 Qt 的文档。
public:
NeHeWidget( QWidget* parent = 0, const char* name = 0, bool fs = false );
~NeHeWidget();
protected:
void initializeGL();
void paintGL();
void resizeGL( int width, int height );
因为 QGLWidget 类已经内置了对 OpenGL 的处理,就是通过对 initializeGL()、
paintGL()和 resizeGL()这个三个函数实现的,具体情况可以参考 QGLWidget 类的
文档。
因为我们的这个 Qt OpenGL 教程取材于 NeHe OpenGL 教程,所以这里就用这个
NeHeWidget 类来继承 QGLWidget 类来使用相关 OpenGL 的功能。

initializeGL()是用来初始化这个 OpenGL 窗口部件的,可以在里面设定一些有关
选项。paintGL()就是用来绘制 OpenGL 的窗口了,只要有更新发生,这个函数就
会被调用。resizeGL()就是用来处理窗口大小变化这一事件的,width 和 height 就
是新的大小状态下的宽和高了,另外 resizeGL()在处理完后会自动刷新屏幕。
void keyPressEvent( QKeyEvent *e );
这是 Qt 里面的鼠标按下事件处理函数。
protected:
bool fullscreen;
用来保存窗口是否处于全屏状态的变量。
};
(由 nehewidget.cpp 展开。)
#include "nehewidget.h"
NeHeWidget::NeHeWidget( QWidget* parent, const char* name, bool fs )
: QGLWidget( parent, name )
{
fullscreen = fs;
保存窗口是否为全屏的状态。
setGeometry( 0, 0, 640, 480 );
设置窗口的位置,即左上角为(0,0)点,大小为 640*480。
setCaption( "NeHe's OpenGL Framework" );
设置窗口的标题为“NeHe's OpenGL Framework”。
if ( fullscreen )
showFullScreen();
如果 fullscreen 为真,那么就全屏显示这个窗口。
}
这个是构造函数,parent 就是父窗口部件的指针,name 就是这个窗口部件的名
称,fs 就是窗口是否最大化。
剩余79页未读,继续阅读


















yusora
- 粉丝: 0
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- (2025)初级会计考试试题题库及答案(完整版).docx
- (2025)初级会计考试题库 (含答案).docx
- (2025)初级会计实务真题及答案.docx
- (2025)初级会计职称初级会计实务考试试题及答案.docx
- (2025)初级会计职称初级会计实务考试试题与答案.docx
- (2025)初级会计职称考试全套真题及答案.docx
- (2025)初级会计职称考试全套真题与答案.docx
- (2025)初级会计职称考试题库(附参考答案).docx
- (2025)初级社工考试试卷真题及答案.docx
- (2025)初级社会工作者《工作实务》试题及答案.docx
- (2025)初级社会工作者《工作实务》试题和答案.docx
- (2025)初级社会工作者《工作实务》试题与答案.docx
- (2025)初级社工考试真题及答案.docx
- (2025)初级社会工作者考试《社会工作综合能力》真题及答案.docx
- (2025)初级社会工作者工作实务真题及答案.docx
- (2025)初级社会工作者考试《社会工作综合能力》真题与答案.docx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈



安全验证
文档复制为VIP权益,开通VIP直接复制

评论0