欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C++ Qt的场景图Scene Graph

程序员文章站 2022-03-07 15:12:24
例如,假设用户界面包含十个项目的列表,其中每个项目都有背景色,图标和文本。使用传统的绘图技术,这将导致30次绘图调用和类似数量的状态更改。另一方面,场景图可以重组原始图元以进行渲染,以便在一次调用中绘制所有背景,然后绘制所有图标,然后绘制所有文本,从而将绘制调用的总数减少到仅3个。批处理和状态更改减少这样可以大大提高某些硬件的性能。......

场景图是Qt Quick 2.0引入的,建立在要绘制的内容是已知的基础上。

例如,假设用户界面包含十个项目的列表,其中每个项目都有背景色,图标和文本。使用传统的绘图技术,这将导致30次绘图调用和类似数量的状态更改。另一方面,场景图可以重组原始图元以进行渲染,以便在一次调用中绘制所有背景,然后绘制所有图标,然后绘制所有文本,从而将绘制调用的总数减少到仅3个。批处理和状态更改减少这样可以大大提高某些硬件的性能。

场景图由QQuickWindow类管理和呈现,自定义Item类型可以通过调用QQuickItem :: updatePaintNode()将其图形基元添加到场景图中。

C++ Qt的场景图Scene Graph

场景图是Item场景的图形表示,它是一个独立的结构,其中包含足以渲染所有项目的信息。设置完成后,就可以独立于项目状态对其进行操作和渲染。在许多平台上,场景图形甚至会在GUI线程准备下一帧状态时在专用渲染线程上进行渲染。

场景图的结构

场景图由许多预定义的节点类型组成,每种类型都有专门的用途。尽管我们将其称为场景图,但更精确的定义是节点树。该树是根据QML场景中的QQuickItem类型构建的,然后在内部由渲染该场景的渲染器处理该场景。节点本身不包含任何活动的绘图代码或虚拟paint()函数。

即使节点树主要由现有的Qt Quick QML类型在内部构建,用户也可以添加具有自己内容的完整子树,包括表示3D模型的子树。

节点

对于用户而言,最重要的节点是QSGGeometryNode。它用于通过定义其几何形状和材质来定义自定义图形。使用QSGGeometry定义几何形状,并描述图形图元的形状或网格。它可以是直线,矩形,多边形,许多不连续的矩形或复杂的3D网格。该材质定义如何填充此形状的像素。

一个节点可以有任意数量的子节点,并且将渲染几何节点,以便它们以子顺序出现,并且父级位于其子级之后。

常见的节点有:

QSGClipNode

在场景图中实现裁剪功能

QSGGeometryNode

用于场景图中的所有渲染内容

QSGNode

场景图中所有节点的基类

QSGOpacityNode

用于更改节点的不透明度

QSGTransformNode

Implements transformations in the scene graph

 

 

本文地址:https://blog.csdn.net/hankern/article/details/109649219

相关标签: C++学习