Qt5.15 + MingGW 32-Bit
.pro
QT += opengl
win32:LIBS += -lOpengl32 -lglu32
unix:LIBS += -lglut -lGLU
#include
#include
#include
#include
class MOpenGLWidget : public QOpenGLWidget, QOpenGLFunctions_4_5_Core
{
Q_OBJECT
public:
explicit MOpenGLWidget(QWidget *parent = nullptr);
protected:
//重载几个opengl的重要函数
//该函数在调用paintGL()和resizeGL()之前被调用一次,负责初始化绘制资源和状态值
//该函数绘把上下文激活设置为当前,不需要单独调用makeCurrent()函数
virtual void initializeGL();
//窗口尺寸发生变化的时候被调用, 对绘制的图像进行调整
virtual void resizeGL(int w, int h);
//paintGL()类似QWidget的paintEvent()函数,负责对OpenGL图形进行绘制、更新或重绘
virtual void paintGL();
};
MOpenGLWidget::MOpenGLWidget(QWidget *parent)
: QOpenGLWidget{parent}
{
//设置多采样的值, 抗锯齿
QSurfaceFormat fmt = format();
fmt.setSamples(18);
setFormat(fmt);
}
void MOpenGLWidget::initializeGL()
{
// 这个函数仅会在构造类对象时调用一次,
initializeOpenGLFunctions();
//设置画布颜色
glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
}
void MOpenGLWidget::resizeGL(int w, int h)
{
glViewport(0, 0, w, h);
}
void MOpenGLWidget::paintGL()
{
glClear(GL_COLOR_BUFFER_BIT);
//启动绘制(点)
glBegin(GL_POINTS);
{
// 颜色
glColor3f(0.0f, 1.0f, 0.0f);
//点的三维坐标
glVertex3f(-1.0f, 0.0f, 0.0f);
glVertex3f(-0.5f, 0.0f, 0.0f);
glVertex3f(0.0f, 0.0f, 0.0f);
glVertex3f(0.5f, 0.0f, 0.0f);
glVertex3f(1.0f, 0.0f, 0.0f);
}
//结束绘制
glEnd();
}
说明:在opengl中,坐标的数值在[-1, 1],且从上到下(y)、从左到右(z)、从高到低(z)的坐标值是从1到-1的