1. 在pro中加入
QT += opengl
2.MyOpenGLWidget
MyOpenGLWidget.h
#ifndef MYOPENGLWIDGET_H
#define MYOPENGLWIDGET_H
#include <QOpenGLWidget>
#include <QOpenGLFunctions>
class QOpenGLShaderProgram;
class MyOpenGLWidget:public QOpenGLWidget,protected QOpenGLFunctions
{
public:
explicit MyOpenGLWidget(QWidget *parent=0);
protected:
void initializeGL();
void paintGL();
void resizeGL(int width,int height);
private:
QOpenGLShaderProgram *program;//对象指针,作为着色器程序
};
#endif // MYOPENGLWIDGET_H
MyOpenGLWidget.cpp
#include "myopenglwidget.h"
#include<QOpenGLShaderProgram>
#include <QGLFunctions>
MyOpenGLWidget::MyOpenGLWidget(QWidget *parent):QOpenGLWidget(parent)
{
}
void MyOpenGLWidget::initializeGL()
{
//为当前初始化OPenGL函数
initializeOpenGLFunctions();
//创建顶点着色器
QOpenGLShader *vshader=new QOpenGLShader(QOpenGLShader::Vertex,this);//顶点着色器
const char *vsrc="in vec4 vPosition ; \n"
"void main(){ \n"
"gl_Position =vPosition ; \n"
"} \n";
vshader->compileSourceCode(vsrc);//设置顶点着色器
const char *fsrc="void main(){ \n"
"gl_FragColor=vec4(1.0,1.0,1.0,1.0); \n"
"} \n";
// 创建判断着色器
QOpenGLShader *fshader=new QOpenGLShader(QOpenGLShader::Fragment,this);//顶点着色器
fshader->compileSourceCode(fsrc);// 设置片段着色器
//创建着色程序
program=new QOpenGLShaderProgram;
program->addShader(vshader);
program->addShader(fshader);
program->link();
program->bind();
}
void MyOpenGLWidget::resizeGL(int ,int)
{
}
void MyOpenGLWidget::paintGL()
{
int w=width();
int h=height();
int side=qMin(w,h);
glViewport((w-side)/2,(h-side)/2,side,side);
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);//清除颜色缓存和深度缓存
GLfloat vectices[]={
-0.8f,0.8f,
-0.8f,-0.8f,
0.8f,-0.8f,
0.8f,0.8f
};
GLuint vPosition=program->attributeLocation("vPosition");//返回变量在着色程序参数列表中的位置
glVertexAttribPointer(vPosition,2,GL_FLOAT,GL_FALSE,0,vectices);//将vPosition与顶点数组vectices关联
glEnableVertexAttribArray(vPosition);//启动顶点数组
glDrawArrays(GL_TRIANGLE_FAN,0,4);
}
3.main
#include<QApplication>
#include"myopenglwidget.h"
int main(int argc, char *argv[])
{
QApplication app(argc,argv);
MyOpenGLWidget w;
w.resize(400,300);
w.show();
return app.exec();
}