QT笔记 -- (6) opengl

参考 http://blog.csdn.net/myths_0/article/details/24431597

用glut绘制一个茶壶

一句话,继承QGLWidget,实现下面三个函数,用子类定义窗口就行了。

三个函数:

    void initializeGL();
    void paintGL();
    void resizeGL(int width, int height);

下面是我的QGLWidget的子类的源码。

GLWidget.h

#pragma once#include "qgl.h"#include <gl/GLU.h>#include <OpenGL/GLUT.H>

class GLWidget : public QGLWidget{    Q_OBJECT

public:    GLWidget(QWidget *parent = nullptr) :QGLWidget(parent){};    ~GLWidget();

protected:    void initializeGL();    void paintGL();    void resizeGL(int width, int height);

    void keyPressEvent(QKeyEvent *e);};

GLWidget.cpp

#include "GLWidget.h"

GLWidget::~GLWidget(){}

void GLWidget::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 GLWidget::paintGL(){    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);    glLoadIdentity();    glScalef(0.1,0.1,0.1);    gluLookAt(0, 0, 10, 0, 0, 0, 0, 1, 0);    glutWireTeapot(2);}

void GLWidget::resizeGL(int width, int height){    glViewport(0, 0, (GLint)width, (GLint)height);    glMatrixMode(GL_PROJECTION);    glLoadIdentity();    gluPerspective(45.0, (GLfloat)width / (GLfloat)height, 0.1, 100.0);    glMatrixMode(GL_MODELVIEW);    glLoadIdentity();}

void GLWidget::keyPressEvent(QKeyEvent *e){    }
时间: 2024-10-21 07:58:02

QT笔记 -- (6) opengl的相关文章

Cocos2DX笔记----------使用opengl实现水果忍者刀刃轨迹

最近有个小需求,需要实现水果忍者刀刃的效果,网上找了很多实例代码,查了很多资料,终于捣鼓了出来. 效果图如下: 图1: 图2: 该算法还是比较简单的,先说说流程: [收集轨迹点]主要是使用了cocos2dX中的ccTouchesBegan和ccTouchesMoved ccTouchesBegan里面包含了刷新最近轨迹点的功能 ccTouchesMoved里面包含了添加轨迹点的功能 此时需要一个数组用于记录轨迹的ccpoint,我将它命名为mPointArray,用于存储这些轨迹点.每次手指按下

QT笔记:数据库总结(一)

QT笔记:数据库总结(一)http://blog.csdn.net/reborntercel/article/details/6991147 http://www.devbean.net/2013/06/qt-study-road-2-sql-model/

Windows下Qt开发环境:OpenGL导入3DMax模型(.3DS)

参考:http://blog.csdn.net/cq361106306/article/details/41876541 效果: 源代码: 解释: CLoad3DS.h为加载3DMax模型的头文件,CLoad3DS.cpp为加载3DMax模型的实现文件, nehewidget.h为Qt下使用OpenGL头文件,nehewidget.cpp为Qt下使用OpenGL实现文件. 注意: 1.3D模型和纹理图片资源需要放在源代码同一目录下的Data目录中,即/Data/3DS和/Data/pic下. 2

Qt笔记——MOC(元对象编译器)

moc 全称是 Meta-Object Compiler,也就是"元对象编译器".Qt 程序在交由标准编译器编译之前,先要使用 moc 分析 C++ 源文件.如果它发现在一个头文件中包含了宏 Q_OBJECT,则会生成另外一个 C++ 源文件.这个源文件中包含了 Q_OBJECT 宏的实现代码.这个新的文件名字将会是原文件名前面加上 moc_ 构成.这个新的文件同样将进入编译系统,最终被链接到二进制代码中去.因此我们可以知道,这个新的文件不是"替换"掉旧的文件,而是

SharpGL学习笔记(七) OpenGL的变换总结

笔者接触OpenGL最大的困难是: 经常调试一份代码时, 屏幕漆黑一片, 也不知道结果对不对,不知道如何是好! 这其实就是关于OpenGL"变换"的基础概念没有掌握好, 以至于对"将三维体正确的显示在屏幕上指定位置"这样的操作都无法完成. OpenGL变换包括计算机图形学中最基本的三维变换,即几何变换.投影变换.裁剪变换.视口变换,以及针对OpenGL的特殊变换概念理解和用法,如相机模拟.矩阵堆栈等,这些基础是开始真正走进三维世界无法绕过的基础. 所以笔者在前面花了

QT笔记之模态对话框及非模态对话框

模态对话框(Modal Dialog)与非模态对话框(Modeless Dialog)的概念不是Qt所独有的,在各种不同的平台下都存在.又有叫法是称为模式对话框,无模式对话框等.所谓模态对话框就是在其没有被关闭之前,用户不能与同一个应用程序的其他窗口进行交互,直到该对话框关闭.对于非模态对话框,当被打开时,用户既可选择和该对话框进行交互,也可以选择同应用程序的其他窗口交互. 在Qt中,显示一个对话框一般有两种方式,一种是使用exec()方法,它总是以模态来显示对话框:另一种是使用show()方法

QT笔记之自定义窗口拖拽移动

1.QT自定义标题栏,拖拽标题栏移动窗口(只能拖拽标题,其他位置无法拖拽) 方法一: 转载:http://blog.sina.com.cn/s/blog_4ba5b45e0102e83h.html .h文件中 1 //自己重新实现拖动操作 2 protected: 3 4 void mouseMoveEvent ( QMouseEvent * event ); 5 6 void mousePressEvent ( QMouseEvent * event ); 7 8 void mouseRele

QT笔记之实现阴影窗口

方法一: 代码实现 重写void paintEvent(QPaintEvent *event); void QT_Test::paintEvent(QPaintEvent *event) { QPainterPath path; path.setFillRule(Qt::WindingFill); path.addRect(10, 10, this->width()-20, this->height()-20); QPainter painter(this); painter.setRende

QT笔记之VS2010 Qt中导入qrc资源文件

转载1:http://qimo601.iteye.com/blog/1404693 转载2:http://blog.sina.com.cn/s/blog_92cde3060101lobm.html 转载3:http://www.devbean.net/2012/08/qt-study-road-2-resource-files/ 刚开始自学QT,好多东西不是很明白,从网上搜出来一些资料,先记录下来,以方便以后学习.习惯了使用VS进行写项目,所以选择下载Qt5.2.Qt插件,在给窗口和控件添加背景