当前位置: 首页 > news >正文

学校网站建设评比宾馆酒店网站建设方案

学校网站建设评比,宾馆酒店网站建设方案,wordpress数据类型,哔哩哔哩网页版怎么缓存简介要学习OpenGL的话#xff0c;强烈安利这个教程JoeyDeVries的learnopengl#xff0c;这里是中文翻译好的版本。教程中使用OpenGL是通过GLFW这个库#xff0c;而在Qt中对OpenGL封装得很好#xff0c;并且和GUI以及IO相关的处理Qt更便捷#xff0c;学习起来更轻松。这里就…简介要学习OpenGL的话强烈安利这个教程JoeyDeVries的learnopengl这里是中文翻译好的版本。教程中使用OpenGL是通过GLFW这个库而在Qt中对OpenGL封装得很好并且和GUI以及IO相关的处理Qt更便捷学习起来更轻松。这里就对每篇教程在Qt在分别直接使用OpenGL的函数和Qt封装好的类以作对比。教程中使用的OpenGL版本为3.3在Qt中需要使用此版本的OpenGL只需要继承类QOpenGLFunctions_3_3_Core即可。如果为了在不同设备上都能用OpenGL的话Qt提供了类QOpenGLFunctions这个类包含了大部分公共的函数可能会有个别函数不能用。对比说明教程地址原教程地址相关知识可以点击链接学习。我的工程地址准备后期每篇教程一个commit查看本篇代码 git checkout v1.1喜欢就点个Star吧~不同点原教程关于ShaderProgram的读取、链接很繁琐后面教程还专门写了个类Shader这里我直接使用Qt封装好的addShaderFromSourceFile函数更方便。Qt提供了QOpenGLShaderProgram、QOpenGLVertexArrayObject、QOpenGLBuffer这些类来处理OpenGL中的program、VAO、VBO。运行结果运行结果使用OpenGL函数版CoreFunctionWidget.h#ifndef COREFUNCTIONWIDGET_H#define COREFUNCTIONWIDGET_H#include #include #include #include #include class CoreFunctionWidget : public QOpenGLWidget, protected /*QOpenGLExtraFunctions*/QOpenGLFunctions_3_3_Core{Q_OBJECTpublic:explicit CoreFunctionWidget(QWidget *parent nullptr);~CoreFunctionWidget();protected:virtual void initializeGL();virtual void resizeGL(int w, int h);virtual void paintGL();private:QOpenGLShaderProgram shaderProgram;};#endif // COREFUNCTIONWIDGET_HCoreFunctionWidget.cpp#include CoreFunctionWidget.h#include #include static GLuint VBO, VAO, EBO;CoreFunctionWidget::CoreFunctionWidget(QWidget *parent) : QOpenGLWidget(parent){}CoreFunctionWidget::~CoreFunctionWidget(){glDeleteVertexArrays(1, VAO);glDeleteBuffers(1, VBO);// glDeleteBuffers(1, EBO);}void CoreFunctionWidget::initializeGL(){this-initializeOpenGLFunctions();bool success shaderProgram.addShaderFromSourceFile(QOpenGLShader::Vertex, :/triangle.vert);if (!success) {qDebug() shaderProgram addShaderFromSourceFile failed! shaderProgram.log();return;}success shaderProgram.addShaderFromSourceFile(QOpenGLShader::Fragment, :/triangle.frag);if (!success) {qDebug() shaderProgram addShaderFromSourceFile failed! shaderProgram.log();return;}success shaderProgram.link();if(!success) {qDebug() shaderProgram link failed! shaderProgram.log();}//VAOVBO数据部分float vertices[] {0.5f, 0.5f, 0.0f, // top right0.5f, -0.5f, 0.0f, // bottom right-0.5f, -0.5f, 0.0f, // bottom left-0.5f, 0.5f, 0.0f // top left};unsigned int indices[] { // note that we start from 0!0, 1, 3, // first Triangle1, 2, 3 // second Triangle};glGenVertexArrays(1, VAO);glGenBuffers(1, VBO);glGenBuffers(1, EBO);// bind the Vertex Array Object first, then bind and set vertex buffer(s), and then configure vertex attributes(s).glBindVertexArray(VAO);glBindBuffer(GL_ARRAY_BUFFER, VBO);glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW); //顶点数据复制到缓冲glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO);glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW);glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(GLfloat), (void*)0);//告诉程序如何解析顶点数据glEnableVertexAttribArray(0);glBindBuffer(GL_ARRAY_BUFFER, 0);//取消VBO的绑定, glVertexAttribPointer已经把顶点属性关联到顶点缓冲对象了// remember: do NOT unbind the EBO while a VAO is active as the bound element buffer object IS stored in the VAO; keep the EBO bound.// glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);// You can unbind the VAO afterwards so other VAO calls wont accidentally modify this VAO, but this rarely happens. Modifying other// VAOs requires a call to glBindVertexArray anyways so we generally dont unbind VAOs (nor VBOs) when its not directly necessary.glBindVertexArray(0); //取消VAO绑定//线框模式QOpenGLExtraFunctions没这函数, 3_3_Core有// glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);}void CoreFunctionWidget::resizeGL(int w, int h){glViewport(0, 0, w, h);}void CoreFunctionWidget::paintGL(){glClearColor(0.2f, 0.3f, 0.3f, 1.0f);glClear(GL_COLOR_BUFFER_BIT);shaderProgram.bind();glBindVertexArray(VAO); // seeing as we only have a single VAO theres no need to bind it every time, but well do so to keep things a bit more organized// glDrawArrays(GL_TRIANGLES, 0, 6);glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0);shaderProgram.release();}使用Qt相关函数版QtFunctionWidget.h#ifndef QTFUNCTIONWIDGET_H#define QTFUNCTIONWIDGET_H#include #include #include #include #include #include #include #include class QtFunctionWidget : public QOpenGLWidget, protected QOpenGLFunctions{public:QtFunctionWidget(QWidget *parent nullptr);~QtFunctionWidget() Q_DECL_OVERRIDE;protected:virtual void initializeGL() Q_DECL_OVERRIDE;virtual void resizeGL(int w, int h) Q_DECL_OVERRIDE;virtual void paintGL() Q_DECL_OVERRIDE;private:QOpenGLShaderProgram shaderProgram;QOpenGLBuffer vbo, ebo;QOpenGLVertexArrayObject vao;};#endif // QTFUNCTIONWIDGET_HQtFunctionWidget.cpp#include QtFunctionWidget.h#include QtFunctionWidget::QtFunctionWidget(QWidget *parent) : QOpenGLWidget (parent),vbo(QOpenGLBuffer::VertexBuffer),ebo(QOpenGLBuffer::IndexBuffer){}QtFunctionWidget::~QtFunctionWidget(){makeCurrent();vbo.destroy();ebo.destroy();vao.destroy();doneCurrent();}void QtFunctionWidget::initializeGL(){this-initializeOpenGLFunctions();bool success shaderProgram.addShaderFromSourceFile(QOpenGLShader::Vertex, :/triangle.vert);if (!success) {qDebug() shaderProgram addShaderFromSourceFile failed! shaderProgram.log();return;}success shaderProgram.addShaderFromSourceFile(QOpenGLShader::Fragment, :/triangle.frag);if (!success) {qDebug() shaderProgram addShaderFromSourceFile failed! shaderProgram.log();return;}success shaderProgram.link();if(!success) {qDebug() shaderProgram link failed! shaderProgram.log();}//VAOVBO数据部分GLfloat vertices[] {0.5f, 0.5f, 0.0f, // top right0.5f, -0.5f, 0.0f, // bottom right-0.5f, -0.5f, 0.0f, // bottom left-0.5f, 0.5f, 0.0f // top left};unsigned int indices[] { // note that we start from 0!0, 1, 3, // first Triangle1, 2, 3 // second Triangle};QOpenGLVertexArrayObject::Binder vaoBind(vao);vbo.create();vbo.bind();vbo.allocate(vertices, sizeof(vertices));ebo.create();ebo.bind();ebo.allocate(indices, sizeof(indices));int attr -1;attr shaderProgram.attributeLocation(aPos);shaderProgram.setAttributeBuffer(attr, GL_FLOAT, 0, 3, sizeof(GLfloat) * 3);shaderProgram.enableAttributeArray(attr);vbo.release();// remember: do NOT unbind the EBO while a VAO is active as the bound element buffer object IS stored in the VAO; keep the EBO bound.// ebo.release();}void QtFunctionWidget::resizeGL(int w, int h){glViewport(0, 0, w, h);}void QtFunctionWidget::paintGL(){glClearColor(0.2f, 0.3f, 0.3f, 1.0f);glClear(GL_COLOR_BUFFER_BIT);shaderProgram.bind();{QOpenGLVertexArrayObject::Binder vaoBind(vao);glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0);}shaderProgram.release();}GLSLtriangle.vert#version 330 corelayout(location 0) in vec3 aPos;void main(){gl_Position vec4(aPos.x, aPos.y, aPos.z, 1.0f);}triangle.frag#version 330 coreout vec4 FragColor;void main(){FragColor vec4(1.0f, 0.5f, 0.2f, 1.0f);}main.cpp#include #include MainWindow.h#include QtFunctionWidget.h#include CoreFunctionWidget.hint main(int argc, char *argv[]){QApplication a(argc, argv);// MainWindow w;QtFunctionWidget w1;CoreFunctionWidget w2;w1.setWindowTitle(QObject::tr(QtFunction));w2.setWindowTitle(QObject::tr(CoreFunction));w1.show();w2.show();return a.exec();}
http://www.huolong8.cn/news/281100/

相关文章:

  • 怎么做自己的快递查询网站php网站开发练手项目
  • 为什么做儿童音乐网站民族文化网站建设的作用
  • 做app网站的软件有哪些内容吗手机网站图片宽度
  • 网络系统搭建站长工具seo综合查询网
  • 杭州萧山网站开发超变传奇手游刀刀切割无会员散人
  • 江阴网站建设培训电商视觉设计网站
  • 南昌h5建站学点啥网站
  • 佛山网站建设shundeit网络推广方法
  • 高端网站建设服务商广告设计好学吗
  • 吴忠市建设工程质量监督站网站网页版微信登录提示二维码已失效
  • 策划书的网站wordpress 视差模板
  • 网站建设属于技术服务吗工程中标公示查询怎么查
  • 绚丽网站哪个网站是做包装材料珍珠棉包管
  • 扁平化设计 科技感网站素材推广资源整合平台
  • 网站建设课程设计报告图文网页设计与制作的原则
  • 做网站后面加什么wordpress编辑器图片
  • 如何评价一个网站做的是否好河北建设厅网站开通账号
  • 旅游网站推广方案wordpress弹窗广告
  • 网站管理员怎样管理员权限济宁网站制作
  • 服务器上怎么搭建网站电子商务网站建设与管理课后答案
  • cms内容网站管理系统大公司网站色彩设计
  • 个人做 下载类网站公司注册网上申请流程
  • 建立网站需要什么软件电子商务网站建设的规划和实施
  • 做pc端网站基本流程网站前端设计与制作ppt
  • 网站维修合同石家庄物流网站建设
  • 建设创意网站太原搜索引擎优化
  • 商城网站营销方案网站开发有什么注意的
  • 做网站是干啥的湖北短视频seo营销
  • 简单的个人网站html广告牌logo设计制作
  • 企业网站建设与管理期末考试免费的个人简历模板word下载