OpenGL (1)

1. Add in 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;//Object pointer, as a shader program
};

#endif // MYOPENGLWIDGET_H
MyOpenGLWidget.cpp
#include "myopenglwidget.h"
#include<QOpenGLShaderProgram>
#include <QGLFunctions>
MyOpenGLWidget::MyOpenGLWidget(QWidget *parent):QOpenGLWidget(parent)
{
    
}
void MyOpenGLWidget::initializeGL()
{
    //Initialize the OpenGL function for the current
    initializeOpenGLFunctions();
    //create vertex shader
    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);//Set vertex shader
    const char *fsrc="void main(){        \n"
                    "gl_FragColor=vec4(1.0,1.0,1.0,1.0);  \n"
                    "}                   \n";
    // create a judgment shader
    QOpenGLShader *fshader=new QOpenGLShader(QOpenGLShader::Fragment,this);//Vertex shader


    fshader->compileSourceCode(fsrc);// Set fragment shader
    //create shader program
    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);//Clear the color buffer and depth buffer
    GLfloat vectices [] = {
        -0.8f,0.8f,
        -0.8f,-0.8f,
        0.8f,-0.8f,
        0.8f,0.8f
    };
    GLuint vPosition=program->attributeLocation("vPosition");//Returns the location of the variable in the shader program parameter list
    glVertexAttribPointer(vPosition,2,GL_FLOAT,GL_FALSE,0,vectices);//Associate vPosition with vertex array vectices
    glEnableVertexAttribArray(vPosition);//Start the vertex array
    glDrawArrays(GL_TRIANGLE_FAN,0,4);
}

3.main

#include<QApplication>
#include"myopenglwidget.h"
int main(int argc, char *argv[])
{
    QApplication app(argc,argv);
    MyOpenGLWidget in;
    w.resize(400,300);
    w.show();
    return app.exec();
}



Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=325981547&siteId=291194637
Recommended