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

网站建设流程心得自己的网站中商城怎么做

网站建设流程心得,自己的网站中商城怎么做,免费系统小说大全,合肥seo推广公司文章目录 前言一、Qt下使用OpenGL绘制图形介绍二、示例完整代码总结 前言 文章中引用的内容均来自这本书中的原文#xff1a;【Qt Creator快速入门_霍亚飞编著】#xff0c;本文的示例也是在书中代码的基础上进行编写的#xff08;其中部分代码使用原文编译不过#xff0c… 文章目录 前言一、Qt下使用OpenGL绘制图形介绍二、示例完整代码总结 前言 文章中引用的内容均来自这本书中的原文【Qt Creator快速入门_霍亚飞编著】本文的示例也是在书中代码的基础上进行编写的其中部分代码使用原文编译不过进行了修正这里对相关知识进行了学习总结想要了解更加详细的内容可见原文。 OpenGL是一个跨平台的、用来渲染3D图形的标准API,Qt对OpenGL提供了强大的支持。Qt4时代的QtOpenGL模块在Qt5中已经不再建议使用OpenGL相关的类被移到了QtGUI模块。QtWidgets模块中的QOpenGLWidget类提供了一个可以渲染OpenGL图形的部件通过该部件可以轻松地将OpenGL图形整合到Qt应用程序中。 项目效果 提示以下是本篇文章正文内容下面案例可供参考 一、Qt下使用OpenGL绘制图形介绍 QOpenGLWidget类是一个用来渲染OpenGL图形的部件,它提供了在Qt应用程序中显示 OpenGL图形的功能。这个类使用起来很简单,只需要继承该类然后像使用其他QWidget 部件一样来使用它即可。QGLWidget 提供了3个方便的虚函数可以在子类中重新实现它们来执行典型的 OpenGL任务: initializeGL()设置 OpenGL资源和状态该函数只在第一次调用resizeGL()或paintGL()前被调用一次; resizeGL()设置OpenGL的视口投影等每次部件改变大小时都会调用该函数; paintGL()渲染OpenGL 场景每当部件需要更新时都会调用该函数。 这里介绍下Qt下一些类的使用和OpenGL中重要的概念或名称详情可见参考文章 QOpenGLShader用来创建和编译着色器。着色器是使用 OpenGL着色语言(OpenGL Shading Language,GLSL)编写的一个小型函数。绘图时需要至少指定两个着色器;顶点着色器(vertexshader)和片段着色器(fragmentshader,也称为片元着色器 QOpenGLShaderProgram用来创建并设置着色器程序,可以链接多个着色器并在OpenGL当前环境(current context也称为当前上下文)中绑定着色器程序 QAbstractOpenGLFunctions是一个类族的基类类族中的类涉及了所有 OpenGL 版本,并为相应版本 OpenGL 的所有函数提供了访问接口 QOpenGLBuffer用来创建并管理OpenGL缓存对象 QOpenGLTexture封装了一个OpenGL纹理对象,可以使用该类来设置纹理 二、示例完整代码 1.MyOpenGL.pro QT widgetsHEADERS \myopenglwidget.hSOURCES \main.cpp \myopenglwidget.cpp2.myopenglwidget.h #ifndef MYOPENGLWIDGET_H #define MYOPENGLWIDGET_H#include QOpenGLWidget #include QOpenGLFunctions #include QOpenGLBuffer #include QOpenGLTexture #include QOpenGLShaderProgram #include QKeyEventclass QOpenGLTexture; class QOpenGLShaderProgram; class MyOpenGLWidget : public QOpenGLWidget, protected QOpenGLFunctions {Q_OBJECTpublic:explicit MyOpenGLWidget(QWidget *parent 0);protected:void initializeGL();void paintGL();void resizeGL(int width,int height);void keyPressEvent(QKeyEvent *event);private:QOpenGLShaderProgram *program;QOpenGLBuffer vbo;QOpenGLTexture *textures[2];GLfloat translate,xRot,yRot,zRot; };#endif // MYOPENGLWIDGET_H3.myopenglwidget.cpp #include myopenglwidget.hMyOpenGLWidget::MyOpenGLWidget(QWidget *parent): QOpenGLWidget(parent) {//初始化变量translate -6.0;xRot zRot 0.0;yRot -30.0; }void MyOpenGLWidget::initializeGL() {//初始化纹理变量for(int i0;i2;i){textures[i] new QOpenGLTexture(QImage(QString(../MyOpenGL/side%1.jpg).arg(i1)).mirrored());}//为当前环境初始化OpenGL环境initializeOpenGLFunctions();//开启深度测试glEnable(GL_DEPTH_TEST);//下列着色器使用书中代码运行报错,进行了修正//创建顶点着色器QOpenGLShader *vshader new QOpenGLShader(QOpenGLShader::Vertex,this);const char *vsrc #version 330\nin vec4 vPosition;\nin vec2 vTexCoord;\nout vec2 texCoord;\nuniform mat4 matrix;\nvoid main()\n{\n texCoord vTexCoord;\n gl_Position matrix * vPosition;\n}\n;vshader-compileSourceCode(vsrc);//创建片段着色器QOpenGLShader *fshader new QOpenGLShader(QOpenGLShader::Fragment,this);const char *fsrc #version 330\nuniform sampler2D tex;\nin vec2 texCoord;\nout vec4 fColor;\nvoid main()\n{\n fColor texture(tex,texCoord);\n}\n;fshader-compileSourceCode(fsrc);//创建着色器程序program new QOpenGLShaderProgram;program-addShader(vshader);program-addShader(fshader);program-link();program-bind(); }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 vertices[2][4][3] {{{-0.8f,0.8f,0.8f},{-0.8f,-0.8f,0.8f},{0.8f,-0.8f,0.8f},{0.8f,0.8f,0.8f}},{{0.8f,0.8f,0.8f},{0.8f,-0.8f,0.8f},{0.8f,-0.8f,-0.8f},{0.8f,0.8f,-0.8f}}};//添加缓存vbo.create();vbo.bind();vbo.allocate(vertices,48*sizeof(GLfloat));GLuint vPosition program-attributeLocation(vPosition);//glVertexAttribPointer(vPosition,2,GL_FLOAT,GL_FALSE,0,vertices);program-setAttributeBuffer(vPosition,GL_FLOAT,0,3,0);glEnableVertexAttribArray(vPosition);//顶点着色GLfloat coords[2][4][2] {{{0.0f,1.0f},{0.0f,0.0f},{1.0f,0.0f},{1.0f,1.0f}},{{0.0f,1.0f},{0.0f,0.0f},{1.0f,0.0f},{1.0f,1.0f}}};vbo.write(24*sizeof(GLfloat),coords,16*sizeof(GLfloat));GLuint vTexCoord program-attributeLocation(vTexCoord);program-setAttributeBuffer(vTexCoord,GL_FLOAT,24*sizeof(GLfloat),2,0);glEnableVertexAttribArray(vTexCoord);program-setUniformValue(tex,0);//顶点变换QMatrix4x4 matrix;matrix.perspective(45.0f,(GLfloat)w/(GLfloat)h,0.1f,100.0f);matrix.translate(0,0,translate);matrix.rotate(xRot,1.0,0.0,0.0);matrix.rotate(yRot,0.0,1.0,0.0);matrix.rotate(zRot,0.0,0.0,1.0);program-setUniformValue(matrix,matrix);//绘制函数for(int i0;i2;i){textures[i]-bind();glDrawArrays(GL_TRIANGLE_FAN,i*4,4);} }void MyOpenGLWidget::resizeGL(int,int) {}//按键事件 void MyOpenGLWidget::keyPressEvent(QKeyEvent *event) {switch(event-key()){case Qt::Key_Up:xRot - 10;break;case Qt::Key_Down:xRot 10;break;case Qt::Key_Left:yRot - 10;break;case Qt::Key_Right:yRot 10;break;case Qt::Key_PageUp:zRot - 10;break;case Qt::Key_PageDown:zRot 10;break;case Qt::Key_Space:translate 1;break;case Qt::Key_Alt:translate - 1;break;default:break;}update();QOpenGLWidget::keyPressEvent(event); }4.main.cpp #include QApplication #include myopenglwidget.hint main(int argc,char *argv[]) {QApplication app(argc,argv);MyOpenGLWidget w;w.resize(400,300);w.show();return app.exec(); }总结 通过对书上的3D绘图这一章节学习我也对在Qt下使用OpenGL进行了初步的了解本文仅仅将示例展示给大家没有进行很详细的解释详见学习书籍【Qt Creator快速入门_霍亚飞编著】 这里也推荐一个关于OpenGL的学习网站LearnOpenGL CNhttps://learnopengl-cn.github.io/ hello 共同学习共同进步如果还有相关问题可在评论区留言进行讨论。 学习书籍【Qt Creator快速入门_霍亚飞编著】 参考文章 OpenGL 基本概念 在Qt中使用OpenGL一
http://www.w-s-a.com/news/59696/

相关文章:

  • 移动手机网站建设如何做网站地图视频
  • 手工业网站怎么做成都酒吧设计公司
  • .net 网站生成安装文件目录重庆网站建设沛宣网络
  • 怎么做钓鱼网站吗百度免费域名注册网站
  • 如何给网站做外部优化今年国内重大新闻
  • 有没有做生物科技相关的网站弄一个app大概多少钱
  • 五金加工东莞网站建设怎么做网页跳转
  • 淄博网站优化价格wordpress没有小工具
  • 自己搭建服务器做视频网站wordpress发布文章 发布
  • php仿博客园网站阅读分享网站模板
  • 网站宣传的劣势域名注册长沙有限公司
  • 怎样联系自己建设网站企业怎样做好网站建设
  • 网站制作需求分析电商网站建设浩森宇特
  • 淄博网站建设招聘摄影网站建设的论文
  • 怎么把凡科网里做的网站保存成文件网站建设研究的意义
  • 服务器2003怎么做网站网站建设服务器的配置
  • 高校网站建设方案网站推广软件下载安装免费
  • 重庆没建网站的企业网站开发软件 连接SQL数据库
  • 百度申诉网站沉默是金
  • 如何自己建网站wordpress图片延时加载
  • 甘肃省住房和城乡建设厅注册中心网站千博企业网站管理系统2013
  • 西餐厅网站模板seo搜索引擎优化ppt
  • 什么做的网站吗wordpress注册可见插件
  • 献县做网站价格可以提升自己的网站
  • 如何修改网站title建设网站只能是公司
  • 网站推广效果怎么样建设工程公司组织架构图
  • 成都制作网站价格表网站安全证书过期怎么办
  • 高校图书馆网站的建设方案湖南常德市
  • 房地产怎么做网站推广wordpress插件汉化下载
  • 一般pr做视频过程那个网站有无锡网络公司平台