原地址:http://blog.chinaunix.net/uid-25799257-id-3498005.html

之前一直做地图的算法,没什么时间学习opengl,之前看nehe_OpenGL.chm和Qt+OpenGL教程_for_Qt_4.5.3.doc(感谢分享的网友),看了一些,大概入门了算是;因为公司的opengl代码是高手写的,我们呢??只是调用接口,呵呵,做算法,不过了,还是慢慢的学习了很多东西;

这里还是把之前从文档里面摘取除了的qt的opengl框架留着,想用的时候方便,省的每次敲,作为学习模版还是不错的。

Qt安装好后,基本上opengl可以使用了,不过需要在工程配置文件中加入配置选项;然后基本的.c、.h文件,差不多了!!!

工程配置文件:(.pro)

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#-------------------------------------------------
#
# Project created by QtCreator 2012-12-29T12:00:04
#
#-------------------------------------------------
 
QT       += core gui
QT       += opengl      //OPENGL库支持
QT       += qt3support  //支持qt3支持
 
TARGET = SecondOpenggl
TEMPLATE = app
 
 
SOURCES += main.cpp\
        widget.cpp
 
HEADERS  += widget.h
 
FORMS    += widget.ui

.h文件:

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#ifndef WIDGET_H
#define WIDGET_H
 
#include <qgl.h>
 
namespace Ui {
    class Widget;
}
 
class Widget : public QGLWidget
{
    Q_OBJECT
 
public:
    explicit Widget(QGLWidget *parent = 0, const char* name = 0, bool fs = false);
    ~Widget();
 
protected:
    void initializeGL();                  //glpt初始化
    void paintGL();                       //绘制纹理
    void resizeGL(int width, int height); //调整宽高
 
protected:
    bool fullscreen;          //是否全屏
 
private:
    Ui::Widget *ui;
};
 
#endif // WIDGET_H

.c文件:

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#include "widget.h"
#include "ui_widget.h"
 
Widget::Widget(QGLWidget *parent, const char* name, bool fs) :
    QGLWidget(parent, name),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    fullscreen = fs;
}
 
Widget::~Widget()
{
    delete ui;
}
 
void Widget::initializeGL()                             // 初始化OpenGL
{
    /********************用户自定义的初始化过程*******************/
    glClearColor(0.0f, 0.0f, 0.0f, 0.5f);               // 设置颜色缓冲
    glClearDepth(1.0f);                                 // 设置深度缓冲
    glDepthFunc(GL_LEQUAL);                             // 指定深度缓冲比较值(如果输入的深度值小于或等于参考值,则通过)
    glEnable(GL_DEPTH_TEST);                            // 启用深度缓冲
    glShadeModel(GL_SMOOTH);                            // 指定两点间其他点颜色的过渡模式(GL_SMOOTH会出现过渡效果,GL_FLAT 则只是以指定的某一点的单一色绘制其他所有点)
    glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);  // 指定所控制行为的符号常量
    /*********************************************************/
    return;
}
 
void Widget::paintGL()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // 清除颜色缓冲和深度缓冲
    glLoadIdentity();                                   // 重置模型观察矩阵
 
 
    ///////////////////在此处添加绘制代码////////////////
    glTranslatef( -1.5,  0.0, -6.0);                    // 相对与当前所在的屏幕位置进行移动
 
    ///////////////////在此处添加绘制代码////////////////
}
 
void Widget::resizeGL(int width, int height)            // 窗口大小改变时重新调用
{
    if (0 == height)
    {
        height = 1;
    }
    if (0 == width)
    {
        width = 0;
    }
    glViewport(0, 0, (GLint)width, (GLint)height);                      // 重置当前的视口(Viewport)
    glMatrixMode(GL_PROJECTION);                                        // 选择投影矩阵
    glLoadIdentity();                                                   // 重置投影矩阵
    gluPerspective(45.0, (GLfloat)width/(GLfloat)height, 0.1, 100.0);   // 建立透视投影矩阵
    glMatrixMode(GL_MODELVIEW);                                         // 选择模型观察矩阵
    glLoadIdentity();                                                   // 重置模型观察矩阵
}

main.c文件:

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <QtGui/QApplication>
#include <qicon.h>
#include "widget.h"
 
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
 
    a.setWindowIcon(QIcon("dog.bmp"));
    Widget w(0, 0, false);
    w.setWindowTitle("YOU IS YOU");
    w.show();
 
    return a.exec();
}

 

OpenGL框架+QT版的更多相关文章

  1. 流风ASP.NET框架商业版-工作流1.0简介

    流风ASP.NET框架商业版-工作流1.0简介 工作流简介 在流风ASP.NET框架商业版1.0推出后,就有集成工作流的想法,但是由于工作繁忙和其他事情的耽搁,时隔半年之久工作流1.0的版本才姗姗来迟 ...

  2. VC基于单文档OpenGL框架

    本文是在VC6.0的环境下,运用MFC实现的OpenGL最基本框架,需要简单了解MFC编程(会在VC6.0里创建MFC单文档应用程序就行),甚至不必了解OpenGL的知识.以下是具体的步骤. 1.创建 ...

  3. 基于C/S架构的3D对战网络游戏C++框架 _04客户端详细设计与OpenGL、Qt基础

    本系列博客主要是以对战游戏为背景介绍3D对战网络游戏常用的开发技术以及C++高级编程技巧,有了这些知识,就可以开发出中小型游戏项目或3D工业仿真项目. 笔者将分为以下三个部分向大家介绍(每日更新): ...

  4. Jeasyframe 开源框架 稳定版 V1.5 发布

    这是Jeasyframe开源框架的第一个稳定版本,感谢一起帮忙测试并给予反馈的网友们. 框架官网:http://www.jeasyframe.org/ 产品介绍: Jeasyframe开源框架是基于S ...

  5. Qt版helloworld

    跟学别的编程语言一样,Qt也不例外,一开始就想写一个helloworld.初学Qt十几天,看了一点关于Qt视频的介绍和书上的基础知识,对于Qt写工程的概念有了初步的认识,就代码的形式来说,Qt Cre ...

  6. Linux下安装QT和OpenGL后QT无法使用OpenGL的解决方法

    我的系统为Ubuntu14.04,用apt-get安装了实现了OpenGl的mesa,QT则是用官网下载的run文件来安装的. 好了,现在两个都分别有了,所以要在qt下尝试写OpenGl代码. 之前试 ...

  7. OpenGL编程-OpenGL框架-win32项目

    在win32项目中开发的程序 小知识: 控制台应用程序运行就是dos的界面 项目一般采用了可视化开发 开发出来的东西就像QQ之类的 是有窗口界面的 程序运行结果是这样的 源代码:对第45行进行覆盖 # ...

  8. 简单实现Spring框架--注解版

    自己写的Spring框架——简单实现IoC容器功能 前几天在网上看了篇帖子,是用xml的方式实现spring的ioc容器,觉得挺有意思的,这边自己试着用注解的形式造了一套轮子. 工程结构 codein ...

  9. 基于对话框的Opengl框架

    转自:http://blog.csdn.net/longxiaoshi/article/details/8238933 12-11-29 14:55 1198人阅读 评论(6) 收藏 举报  分类: ...

随机推荐

  1. 类之string类、Math类、DateTime类

    String类 string a = "abcdef123456"; 注:字符串的长度是从0开始计数的如:0,1,2,3,4,5,6,7,8,9........ a.Length; ...

  2. reStructuredText(.rst)语法规则快速入门

    原文:http://blog.useasp.net/archive/2014/09/05/rst-file-restructuredtext-markup-syntax-quikstart.aspx? ...

  3. 那些年搞不懂的"协变"和"逆变"

    博主之前也不是很清楚协变与逆变,今天在书上看到了有关于协变还是逆变的介绍感觉还是不太懂,后来看了一篇园子里面一位朋友的文章,顿时茅塞顿开.本文里面会有自己的一些见解也会引用博友的一些正文,希望通过本篇 ...

  4. [置顶] Android4.x对长按电源键(挂断键)和短按电源键(挂断键)的详细处理流程

    1. 简介 Android4.x在Framework的PhoneWindowManager对Power(KeyEvent.KEYCODE_POWER)和Home(KeyEvent.KEYCODE_HO ...

  5. 基于visual Studio2013解决C语言竞赛题之0525拉丁方阵

     题目

  6. 无线网络wifi (WPA/WPA2)密码破解方法

    无线网络password破解WPA/WPA2教程 本教程用于探索无线路由安全漏洞,禁止用于非法用途,违者法律必究(与我无关) 在动手破解WPA/WPA2前,应该先了解一下基础知识,本文适合新手阅读 首 ...

  7. kvm libvirt: hostdev passthrough support 解决加密狗冲突问题

    From: "Daniel P. Berrange" <berrange redhat com> To: Guido Günther <agx sigxcpu o ...

  8. Java NIO与IO

    当学习了Java NIO和IO的API后,一个问题立即涌入脑海: 我应该何时使用IO,何时使用NIO呢?在本文中,我会尽量清晰地解析Java NIO和IO的差异.它们的使用场景,以及它们怎样影响您的代 ...

  9. 华为s5700 添加与删除vlan

    新建vlan 删除vlan ① 检查该VLAN下是否存在成员接口,使用如下命令:display vlan all② 如存在成员接口,则进入该接口视图,删除该成员,否则可略过此步骤,例如:interfa ...

  10. awk 的逻辑运算字符

    既然有需要用到 "条件" 的类别,自然就需要一些逻辑运算啰-例如底下这些:运算单元代表意义> 大于小于>= 大于或等于小于或等于== 等于!= 不等于值得注意的是那个 ...