欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 八卦 > Qt之opengl定点数据添加更多属性

Qt之opengl定点数据添加更多属性

2025/4/19 0:39:36 来源:https://blog.csdn.net/suntingsheng123/article/details/147162567  浏览:    关键词:Qt之opengl定点数据添加更多属性

将颜色数据加入到定点数据中去

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();
}
//定点着色器-》几何着色-》图元装配-》光栅化-》片段着色器-》测试与混合

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词