QT是常用的跨平台的c++界面框架,可以直接使用qt窗体来进行opengl程序的开发,这里使用的是vs2013+qt5.2.4,下面给出一个简单示例。
anamazingworld.h:
#ifndef ANAMAZINGWORLD_H
#define ANAMAZINGWORLD_H
#include <QtWidgets/QWidget>
#include <QtOpengl/qgl.h>
#include <GL/GL.h>
#include <GL/GLU.h>
class AnAmazingWorld : public QGLWidget
{
Q_OBJECT
public:
AnAmazingWorld(QWidget *parent = 0);
~AnAmazingWorld();
protected:
virtual void initializeGL();//初始化
virtual void resizeGL(int w, int h);//视口变换
virtual void paintGL();//渲染
};
#endif // ANAMAZINGWORLD_H
anamazingworld.cpp:
#include "anamazingworld.h"
AnAmazingWorld::AnAmazingWorld(QWidget *parent)
: QGLWidget(parent)
{
setWindowTitle(QString::fromLocal8Bit("奇妙世界"));
showMaximized();
}
AnAmazingWorld::~AnAmazingWorld()
{
}
void AnAmazingWorld::initializeGL()
{
//设置清除颜色
glClearColor(0.0, 0.0, 0.0, 0.0);
}
void AnAmazingWorld::resizeGL(int w, int h)
{
//视图变换
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(0.0, 0.0, 15.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
//投影变换
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(40.0, (GLdouble)w / (GLdouble)h, 15.0, 10000.0);
//视口变换
glViewport(0, 0, (GLsizei)w, (GLsizei)h);
}
void AnAmazingWorld::paintGL()
{
//清屏
glClear(GL_COLOR_BUFFER_BIT);
//绘制多边形
glBegin(GL_POLYGON);
glColor3f(1.0, 0.0, 0.0);
glVertex3f(-2, -2, 0);
glColor3f(0.0, 1.0, 0.0);
glVertex3f(2, -2, 0);
glColor3f(0.0, 0.0, 1.0);
glVertex3f(2, 2, 0);
glColor3f(1.0, 0.0, 0.0);
glVertex3f(-2, 2, 0);
glEnd();
glFlush();
}
main.cpp:
#include "anamazingworld.h"
#include <QtWidgets/QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
AnAmazingWorld w;
w.show();
return a.exec();
}
下面是程序显示效果