#include <QGLWidget>
class QGLWidgetTest : public QGLWidget
{
Q_OBJECT
public:
QGLWidgetTest(QWidget *parent = 0);
~QGLWidgetTest();
protected:
//重写的三个虚函数
void initializeGL();
void resizeGL(int w, int h);
void paintGL();
};
#include "qglwidgettest.h"
#include <gl/GLU.h>
QGLWidgetTest::QGLWidgetTest(QWidget *parent) :QGLWidget(parent)
{
}
QGLWidgetTest::~QGLWidgetTest()
{
}
void QGLWidgetTest::initializeGL()
{
//设置widget的坐标和尺寸
setGeometry(300, 150, 500, 500);
//设置清除时颜色
glClearColor(0.0, 0.0, 0.0, 0);
}
void QGLWidgetTest::resizeGL(int w, int h)
{
//视口变换
glViewport(0, 0, (GLsizei)w, (GLsizei)h);
//投影变换
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(40.0, (GLdouble)w / (GLdouble)h, 0.1, 10000.0);
//视图变换
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(0.0, 0.0, 10.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
}
void QGLWidgetTest::paintGL()
{
//清屏
glClear(GL_COLOR_BUFFER_BIT);
// 设置正面为填充模式
glPolygonMode(GL_FRONT, GL_FILL);
// 设置反面为线形模式
glPolygonMode(GL_BACK, GL_LINE);
// 设置两面均为顶点绘制方式
glPolygonMode(GL_FRONT_AND_BACK, GL_POINT);
//如果以顺时针绘制则是反面,逆时针绘制则是正面
// 设置CCW方向为“正面”,CCW即CounterClockWise,逆时针
glFrontFace(GL_CCW);
// 设置CW方向为“正面”,CW即ClockWise,顺时针
glFrontFace(GL_CW);
// 设置逆时针绘制一个正方形
glBegin(GL_POLYGON);
glVertex2f(-0.5f, -0.5f);
glVertex2f(0.0f, -0.5f);
glVertex2f(0.0f, 0.0f);
glVertex2f(-0.5f, 0.0f);
glEnd();
// 设置顺时针绘制一个正方形
glBegin(GL_POLYGON);
glVertex2f(0.0f, 0.0f);
glVertex2f(0.0f, 0.5f);
glVertex2f(0.5f, 0.5f);
glVertex2f(0.5f, 0.0f);
glEnd();
}