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

淘宝网站建设的主要工作汉川市建设局网站

淘宝网站建设的主要工作,汉川市建设局网站,公司设计网站需要多少钱,多模室内设计网站1. 说明#xff1a; 前面文章中讲到的 OPenGL 渲染都是在页面加载完成即立刻渲染的#xff0c;如果向控制图形渲染的时间#xff0c;可以在QT界面中添加一些元素来进行控制。此时需要用到OPenGL当中的makeCurrent(),update(),doneCurrent()函数。 效果展示#xff1a; ope…1. 说明 前面文章中讲到的 OPenGL 渲染都是在页面加载完成即立刻渲染的如果向控制图形渲染的时间可以在QT界面中添加一些元素来进行控制。此时需要用到OPenGL当中的makeCurrent(),update(),doneCurrent()函数。 效果展示 opengl与qt交互2. 步骤一 在myopenglwidget.h文件中添加一个枚举放置要绘制的图形类型同时声明三个函数分别为drawShape()clearGraphic()setWireFrame()方便主界面上的元素调用相应代码如下 myopenglwidget.h #ifndef MYOPENGLWIDGET_H #define MYOPENGLWIDGET_H#include QObject #include QWidget#include QOpenGLWidget #include QOpenGLFunctions_3_3_Coreclass MyOpenGLWidget : public QOpenGLWidget,QOpenGLFunctions_3_3_Core {Q_OBJECT public://添加图形类型枚举enum Shape{None,Rect,Circle,Triangle};explicit MyOpenGLWidget(QWidget *parent nullptr);//添加三个辅助函数void drawShape(Shape shape);void clearGraphic();void setWireFrame(bool wireFrame);protected:virtual void initializeGL() override;virtual void resizeGL(int w, int h) override;virtual void paintGL() override;signals:private://定义一个中间变量Shape m_shape; }; #endif // MYOPENGLWIDGET_H3. 步骤二 对上面的三个辅助函数进行设计其中每触发一个函数都应该让OPenGL重新绘制此时应调用 update() 函数而在更新视图之前需要记录当前的视图是什么样的所以还需要在此之前调用 makeCurrent() 函数视图更新结束后需要告知OPenGL已经绘制完毕此时需要调用 doneCurrent() 函数相应代码如下 myopenglwidget.cpp #include myopenglwidget.hunsigned int VBO,VAO; //添加一个索引控制器 unsigned int EBO;//定义一个全局的着色器控制器 unsigned int shaderProgram;float vertices[] {-0.5f,-0.5f,0.0f,0.5f,-0.5f,0.0f,0.0f,0.5f,0.0f };//使用4个顶点数据绘制两个三角形 float vertices2[] {0.5f,0.5f,0.0f,0.5f,-0.5f,0.0f,-0.5f,-0.5f,0.0f,-0.5f,0.5f,0.0f };//添加索引数据 unsigned int indices[]{0,1,3,1,2,3 };MyOpenGLWidget::MyOpenGLWidget(QWidget *parent) : QOpenGLWidget(parent) {} //绘制图形辅助函数 void MyOpenGLWidget::drawShape(MyOpenGLWidget::Shape shape) {makeCurrent();//记录当前视图m_shape shape;update();//视图更新doneCurrent();//结束视图更新 } //清空函数 void MyOpenGLWidget::clearGraphic() {makeCurrent();drawShape(MyOpenGLWidget::None);makeCurrent();glPolygonMode(GL_FRONT_AND_BACK,GL_FILL);update();doneCurrent(); } //设置线框模式函数 void MyOpenGLWidget::setWireFrame(bool wireFrame) {makeCurrent();if(wireFrame){glPolygonMode(GL_FRONT_AND_BACK,GL_LINE);//以线框模式绘制图形}else{glPolygonMode(GL_FRONT_AND_BACK,GL_FILL);//以填充模式绘制图形}update();doneCurrent(); }void MyOpenGLWidget::initializeGL() {initializeOpenGLFunctions();shaderProgram glCreateProgram();//void glGenVertexArrays(GLsizei n, GLuint *arrays)生成顶点数组对象名称// n: 要产生的VAO对象的数量// arrays: 存放产生的VAO对象的名称glGenVertexArrays(1,VAO);// void glGenBuffers(GLsizei n,GLuint *buffers)生成顶点缓冲对象// n: 要产生的VBO对象的数量// arrays: 存放产生的VBO对象的名称glGenBuffers(1,VBO);//初始化索引器glGenBuffers(1,EBO);glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,EBO);glBufferData(GL_ELEMENT_ARRAY_BUFFER,sizeof (indices),indices,GL_STATIC_DRAW);//绑定VAO和VBOglBindVertexArray(VAO);glBindBuffer(GL_ARRAY_BUFFER,VBO);//在VBO中存入顶点数据glBufferData(GL_ARRAY_BUFFER,sizeof (vertices2),vertices2,GL_STATIC_DRAW);//告诉VAO怎么在VBO中拿数据glVertexAttribPointer(0,3,GL_FLOAT,GL_FALSE,3*sizeof (float),(void*)0);//开启第一个VAOglEnableVertexAttribArray(0);//用完之后解除绑定(信息已经被记录下来了)glBindBuffer(GL_ARRAY_BUFFER,0);glBindVertexArray(0); }void MyOpenGLWidget::resizeGL(int w, int h) {Q_UNUSED(w);Q_UNUSED(h);}void MyOpenGLWidget::paintGL() {glClearColor(0.5f,0.9f,0.4f,1.0f);glClear(GL_COLOR_BUFFER_BIT);//在渲染前只需开启对应的VAO即可glBindVertexArray(VAO);//switch判断 m_shape 的类型进行不同图形的绘制switch (m_shape) {case Rect:glDrawElements(GL_TRIANGLES,6,GL_UNSIGNED_INT,indices);break;default:break;} }4. 步骤三 在主界面中添加三个按钮分别用来绘制清空设置线框模式并相应其clicked信号调用对应的函数即可相应代码如下 myopenglwidget.h #ifndef LEARNOPENGL_H #define LEARNOPENGL_H#include QMainWindowQT_BEGIN_NAMESPACE namespace Ui { class LearnOpenGL; } QT_END_NAMESPACEclass LearnOpenGL : public QMainWindow {Q_OBJECTpublic:LearnOpenGL(QMainWindow *parent nullptr);~LearnOpenGL();private slots://三个按钮的槽函数void on_btn_drawRect_clicked();void on_btn_Clear_clicked();void on_btn_setFrame_clicked();private:Ui::LearnOpenGL *ui; }; #endif // LEARNOPENGL_H myopenglwidget.cpp #include learnopengl.h #include ui_learnopengl.hLearnOpenGL::LearnOpenGL(QMainWindow *parent): QMainWindow(parent), ui(new Ui::LearnOpenGL) {ui-setupUi(this);setCentralWidget(ui-openGLWidget);}LearnOpenGL::~LearnOpenGL() {delete ui; }void LearnOpenGL::on_btn_drawRect_clicked() {ui-openGLWidget-drawShape(MyOpenGLWidget::Rect);//调用绘制图形 }void LearnOpenGL::on_btn_Clear_clicked() {ui-openGLWidget-clearGraphic();//调用清空图形 }bool frame true; void LearnOpenGL::on_btn_setFrame_clicked() {ui-openGLWidget-setWireFrame(frame);//调用线框模式frame !frame; }
http://www.hkea.cn/news/14497952/

相关文章:

  • 网站备案重要性搜狗站群系统
  • 图书馆门户网站建设的意义wordpress 网站图标设置方法
  • cuteftp 备份网站旅游论坛网站建设
  • 怎样用微信做购物网站服务器与网站吗
  • 竞价网站托管新余百度网站建设
  • 微信官网与手机网站区别平台网站怎么做的好
  • 石家庄做网站最好的公司做外贸有效的网站
  • 找网站漏洞赚钱怎么做的菏泽企业网站建设
  • 承德网站制作公司vs2012建设网站
  • 网站开发公司合作协议书wordpress 仪表盘命名
  • 怎么看国外设计网站眉山网站开发
  • 河南建设工程招标网站久久建筑资料网
  • 为什么两学一做进不去网站wordpress+一页一屏
  • 网站运营经理岗位要求成都网站优化方案
  • 视频代做网站wordpress倒计时采集
  • 成都网站建设天府软件园山东德州如何网站建设教程
  • 特产网站设计百度搜索seo
  • 常德网站建设 天维网络营销是干啥的
  • net网站开发教学视频网站建设的税收编码
  • 西安网站建设优化与推广莒县建设局官方网站
  • 专业柳州网站建设公司网站建设数据安全分析
  • 哪家企业做网站好手机端的网页
  • 镇江网站建设机构大宗商品交易平台政策
  • 界面设计网站网站建设高端定制
  • 阿里云服务器做网站多少钱沧州市网站
  • 外贸网站推广哪个平台好筑招建筑人才网长春安全员
  • 多城市网站建设建站软件移动版
  • 官方网站minecraft辽宁省建设厅网站官网
  • 儿童影楼网站设计网站后台帐号
  • 浙江做网站的公司装修公司排名 装饰设计