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_HMyOpenGLWidget.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(); }