將顏色數據加入到定點數據中去
shader中代碼
api中的代碼
#include "sunopengl.h"#include <QTime>sunOpengl::sunOpengl(QWidget *parent)
{
}
unsigned int VBO,VAO;
float vertices[]={0.5f, 0.5f, 0.0f, 1.0f, 0.0f, 0.0f,0.5f, -0.5f, 0.0f, 0.0f, 1.0f, 0.0f,-0.5f,-0.5f, 0.0f, 0.0f, 0.0f, 1.0f,-0.5f,0.5f, 0.0f, 0.5f, 0.5f, 0.5f,
};unsigned int indices[]={0,1,3,1,2,3,
};
unsigned int EBO;
sunOpengl::~sunOpengl()
{makeCurrent();glDeleteVertexArrays(1,&VAO);glDeleteBuffers(1,&VBO);glDeleteBuffers(1,&EBO);//glDeleteProgram(shaderProgram);doneCurrent();
}
void sunOpengl::initializeGL()
{this->initializeOpenGLFunctions();shaderProgram.addShaderFromSourceFile(QOpenGLShader::Vertex,":/shades/shapes.vert");shaderProgram.addShaderFromSourceFile(QOpenGLShader::Fragment,":/shades/shapes.frag");bool success=shaderProgram.link();if(!success){qDebug()<<shaderProgram.log();}glGenVertexArrays(1,&VAO);glGenBuffers(1,&VBO);glBindVertexArray(VAO);glBindBuffer(GL_ARRAY_BUFFER,VBO);//將數據傳入顯存glBufferData(GL_ARRAY_BUFFER,sizeof(vertices),vertices,GL_STATIC_DRAW);//告知顯卡解析參數 顯卡知道如何從緩存拿數據glVertexAttribPointer(0,3,GL_FLOAT,GL_FALSE,6*sizeof(float),(GLvoid*)0);glVertexAttribPointer(1,3,GL_FLOAT,GL_FALSE,6*sizeof(float),(GLvoid* )(3*sizeof(float)));//開始VOA屬性glEnableVertexAttribArray(0);glEnableVertexAttribArray(1);//EBOglGenBuffers(1,&EBO);glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,EBO);glBufferData(GL_ELEMENT_ARRAY_BUFFER,sizeof(indices),indices,GL_STATIC_DRAW);glBindVertexArray(0);glBindBuffer(GL_ARRAY_BUFFER,0);
}void sunOpengl::resizeGL(int w, int h)
{}void sunOpengl::paintGL()
{shaderProgram.bind();//glUseProgram(shaderProgram);glClearColor(0.2f,0.3f,0.3f,1.0f);glClear(GL_COLOR_BUFFER_BIT);if(!isDraw)return;glBindVertexArray(VAO);// glDrawArrays(GL_TRIANGLES,0,6);glDrawElements(ShapeType,6,GL_UNSIGNED_INT,0);glBindVertexArray(0);}void sunOpengl::drawrectangle()
{ShapeType=GL_TRIANGLES;isDraw=true;update();
}void sunOpengl::setPloygonMode(bool isWire)
{makeCurrent();if(isWire){glPolygonMode(GL_FRONT_AND_BACK,GL_LINE);}else{glPolygonMode(GL_FRONT_AND_BACK,GL_FILL);}doneCurrent();update();
}void sunOpengl::clear()
{isDraw=false;update();
}
//定點著色器-》幾何著色-》圖元裝配-》光柵化-》片段著色器-》測試與混合