位置: 编程技术 - 正文

Qt新渲染底层Scene Graph研究(二)(qt底层绘图引擎)

编辑:rootadmin

推荐整理分享Qt新渲染底层Scene Graph研究(二)(qt底层绘图引擎),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:qt opengl渲染,qt做界面的效果,qml图形渲染,qt gpu渲染,qml图形渲染,qt3d渲染,qt gpu渲染,qt3d渲染,内容如对您有帮助,希望把文章链接给更多的朋友!

Qt新渲染底层Scene Graph研究(二)

上一篇文章初步介绍了Qt新渲染底层Scene Graph,我们该如何利用这个框架为应用程序增添绚丽的效果呢?首先,我们要明确利用Scene Graph开发的目的是什么。如果是简单的,纯粹的显示2D图形界面,那么直接利用构建在Scene Graph之上的Qt Quick和Qt Quick Widget即可。如果觉得Qt Quick为我们提供的功能不够,在QML这一层无法很好地实现,那么我们或许需要考虑更低一层的Scene Graph了。一个使用Scene Graph的常见需求就是实现3D模型的渲染以及2D图元在其上的叠加(Overlay)。

蒋彩阳原创文章,首发地址: 本文难度偏大,适合有经验的Qt开发同行学习交流。

目前我发现了两种和Scene Graph整合渲染3D的方法。第一是采用Scene Graph提供的相关类,比如说QSGNode等一类和 QSGGeometry等一类进行渲染,此方法在Qt的例子中对应customgeometry例子,这个例子显示了2D的三次贝塞尔曲线是如何显示的;第二种是完全使用OpenGL相关的API进行渲染(为了和Qt兼容,还是建议使用QOpenGL*来包裹之),对应的例子是OpenGL under QML。我大概半年前也写了一个类&#;的例子(参见《Qt移动应用开发(八):实现跨平台的QML和OpenGL混合渲染》)。两个例子对比下来,发现第二种方法,对于第三方库整合更容易一些,因为仅需知道OpenGL的API以及着色器的知识就好了。当然,最近我对第一种方法进行了探索,了解了SceneGraph的一些知识。

好了,大家可以拿出自己的Qt Quick程序进行实验(如果没有的话,我的独立游戏《十日驱&#;记》和《吃药了》的Windows独立运行版可以免费下载进行实验),Windows下进入cmd,设定QSG_VISUALIZE为overdraw,大家来观察一下显示的情况。我们发现一个立方体在窗口内部晃悠,其实呢,并不是立方体在晃悠,而是Qt设定的摄像机在晃悠,场景是不动的。而这个立方体则是正常情况下我们要显示的视景体(又称平截头体)。在Qt Quick中,渲染2D使用的是正交投影而不是透视投影,所以我们看到这个是一个立方体而不是立方台。但是注意,这其中和我们建立的OpenGL场景有些微的差别。我们发现,在Qt Quick中,x向右递增,y向下递增,这和OpenGL的x向右递增,y向上递增是不一样的,而QtQuick又使用了OpenGL,也就是遵循了右手坐标系,那么它的坐标系又是怎么摆放的呢?上篇文章讲到了这个立方体的的范围是x∈[0,Screen.width],y∈[0,Screen.height],z∈[0,stackLayer],其中stackLayer为Item堆叠的个数。我们可以通过一张图来了解坐标系:

Qt新渲染底层Scene Graph研究(二)(qt底层绘图引擎)

现在用右手四指指向x,大拇指指向y,那么手掌的指向就是z了。没错,这就是OpenGL右手坐标系,只不过Qt将它倒置了。同时,overdraw模式的摄像机是处在z轴的负半轴,看的大体位置在z的正半轴。而图中从左到右两个纹理的z&#;分别为-1和0。

在了解这一点后,我们的目标就是让我们绘制的图元尽可能地落在x∈[0,Screen.width],y∈[0,Screen.height],z∈[0,1]的范围内。这就需要我们在VBO里面详细地设定每一个顶点的位置。此外,Qt Quick中的Item::z&#;和OpenGL的z不是一个概念,Item::z表示叠放顺序,&#;越大就越摆在前面,OpenGL的z&#;如图,越小的越表示在前。此外,场景叠放了n层,那么就对整个视景体n等分,各层显示在前面。这个可能不好理解,还是看图吧。

对应QML代码:

对应QML代码:

下篇文章将要介绍我在Scene Graph中显示3D物体的尝试。

在win7环境下安装Qt配置Opencv 安装Qt配置Opencv并不是件容易的事,并且在win7环境下更麻烦。不过我们还是因为没有彻底的搞懂其中的原理,所以才安装的费劲。其实网上有很多安装

OpenGL中的多重采样 OpenGL中的多重采样抗锯齿处理的最大优点之一就是它能够使多边形的边缘更为平滑,使渲染效果显得更为真和自然。点和直线的抗锯齿处理是得到广泛

MFC下二维OpenGL环境详细配置 一直以来,网上有很多关于OpenGL在MFC环境下配置的教程,但是,一般都说的不够详细,或者配置过程不够完整,今天我在自己摸索和学习的基础了,写

标签: qt底层绘图引擎

本文链接地址:https://www.jiuchutong.com/biancheng/369646.html 转载请保留说明!

上一篇:GLWallpaperService分析一

下一篇:在win7环境下安装Qt配置Opencv(保证windows 7安装后正常使用的安装方法)

  • 税务局退回个税会计分录
  • 合伙企业税务筹划点
  • 运动手环的税收分类编码是
  • 主管税务机关是否参与清算
  • 代扣代缴个人所得税有滞纳金吗
  • 稳岗补贴属于不征税收入吗
  • 收付实现制有应收应付吗
  • 小规模纳税人免税账务处理
  • 企业所得税成本没有发票怎么处理
  • 现金流量净额正负
  • 固定资产明细账需要每年更换吗
  • 房地产开发企业销售自行开发的房地产项目
  • 存在标的的资产是什么意思
  • 企业发票入账冲销流程
  • 固定资产已折旧完报废如何处理
  • 小规模纳税人购入货物收到增值税专用发票
  • 当地预缴2%什么时候缴纳
  • 项目部管理人员及作业人员的
  • 个税手续费返还计入哪个科目
  • 税局未核定印花税一直没有交怎么办
  • 其他公司代付工资怎么做
  • 股权转让能否低于股价
  • 购买使用过的固定资产如何计提折旧
  • 以前固定资产入账折旧怎么提
  • 分期收款计提销项税怎么算
  • 月销售不超过10万免征哪些税
  • 上月未计提税费,本月可以补计提吗
  • 什么是补提或者计提
  • 财务会计中关于坏账损失的账务处理
  • mac死机什么原因
  • 电脑怎么更新系统日期
  • 应交所得税的计算公式excel
  • 蓝牙耳机连电脑
  • ftp pwd命令
  • PHP:http_build_query()的用法_url函数
  • 人力资源服务代缴社保税率是多少
  • 工程结算需要哪些施工方案
  • 生产企业外销收入账务处理
  • 什么是市盈率和市净率,谈谈你对两个指标的理解
  • 重置java
  • 关于眼中的世界的作文
  • [paper] lift,splat,shooting 论文浅析
  • 禁用dos命令
  • 发票金额和打款金额不一致怎么办
  • 个人所得税要缴纳一万多怎么办
  • 帝国cms使用手册
  • Python IDE之Thonny的介绍
  • 企业贷款的条件和流程
  • 新会计准则物业公司计提应收账款分录
  • 科目余额表平是什么情况
  • 职工食堂费列入哪里
  • 临时工工资计入什么费用
  • 工会经费教育经费计提比例
  • 年底本年利润结转错了怎么调
  • 防伪标内容
  • 怎样充高速路etc现金
  • 记账凭证如何填写样本
  • 收到银行结息收入怎么做会计分录
  • 在建工程预付款怎么做账
  • 开设明细账
  • linux系统检测
  • windows7睡眠唤醒快捷键
  • win8打开ie
  • gnu grub卸载
  • uiview和calayer关系
  • nodejs和mysql
  • 批处理命令教程 pdf
  • 电脑windows自动关闭
  • shell脚本获取进程pid
  • 关于android工程中的assets目录的正确说法
  • nodejs bff
  • node通过express搭建自己的服务器
  • 地铁酷跑瞬间移动
  • js确认框选择取消时退出程序怎么设置
  • js设置页面的scrolltop
  • 第三方审计报告需要多久
  • 仓储物流用地属于商业用地吗
  • 杭州市税务局副局长
  • 三证合一怎么申报
  • 个体工商户税收起征点是多少
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设