效果:
由于上传大小的限制,只能制作短暂的效果。
在这篇文章中,将要展现的效果是在3D场景中移动位图,得到简单的动画效果。便于大家共同学习,给出全部代码:
在开始前,你应该在pro中添加
LIBS += glut.lib glut32.lib
同时你也应该将这两个库加到QT的bin目录下。
glwidget.h
#ifndef GLWIDGET_H
#define GLWIDGET_H
#include <QtOpenGL>
#include <QWidget>
namespace Ui {
class GLWidget;
}
class GLWidget : public QGLWidget
{
Q_OBJECT
public:
explicit GLWidget(QGLWidget *parent = 0);
~GLWidget();
protected:
void initializeGL(); //初始化OpenGL窗口部件
void paintGL(); //绘制整个OpenGL窗口,只要有更新发生,这个函数就会被调用
void resizeGL(int width, int height); //处理窗口大小变化事件的,参数是新状态下的宽和高
void keyPressEvent(QKeyEvent *e); //鼠标处理函数
void loadGLTextures();
void timerEvent(QTimerEvent *);
protected:
bool fullscreen; //判断是否全屏的变量
bool twinkle; //闪烁的星星
bool tp; //"T" 按下了吗
bool blend;
GLfloat rotate_angle;
double title;
double zoom;
double tilt;
GLfloat spin;
GLuint loop;
GLuint texture[1];
private:
Ui::GLWidget *ui;
};
#endif // GLWIDGET_H
glwidget.cpp
#include "glwidget.h"
#include "ui_glwidget.h"
#include <QtGui>
#include <QtCore>
#include <QtOpenGL>
#include <GL/GLU.h>
const int num = 50;
typedef struct
{
int r, g, b;
GLfloat dist;
GLfloat angle;
}stars;
stars star[num];
GLfloat light_ambient[4]={0