class QSGGeometry#

QSGGeometry 类提供 Qt Quick 场景图(Qt Quick Scene Graph)中图形原语的低级别存储。

概要#

方法#

静态函数#

注意

本文档可能包含从 C++ 自动翻译到 Python 的代码片段。我们始终欢迎对片段翻译的贡献。如果发现翻译问题,也可以通过在 https:/bugreports.qt.io/projects/PYSIDE 上创建工单来告知我们。

详细描述#

QSGGeometry 类存储用场景图渲染的基本图形的几何形状。它包含顶点数据以及可选的索引数据。绘制几何形状所使用的模式,也称为基本拓扑,可以通过 setDrawingMode() 来指定。

顶点可以是简单的由 x 和 y 值定义的点,也可以更复杂,每个顶点包含法线、纹理坐标和 3D 位置。使用 AttributeSet 来描述顶点数据的构建方式。属性集只能在构造时指定。《a class="xref py py-class docutils literal notranslate">QSGGeometry 类默认提供了一些便利的属性和属性集。函数 defaultAttributes_Point2D() 返回一个用于常规实色矩形的属性集,而 defaultAttributes_TexturedPoint2D 函数返回用于纹理化 2D 几何形状的属性。顶点数据内部以 void * 存储并可通过 vertexData() 函数访问。使用 vertexDataAsPoint2D()vertexDataAsTexturedPoint2D() 提供便利访问常用的属性集。通过将顶点数量传递给构造函数或以后调用 allocate(),分配顶点数据。

QSGGeometry 可选包含无符号 32 位、无符号 16 位或无符号 8 位整数的索引。索引类型必须在构造时指定,并且不能更改。

以下是一个示例代码片段,说明如何构建由位置和颜色顶点组成的几何形状。

struct MyPoint2D {
    float x;
    float y;
    float r;
    float g;
    float b;
    float a;

    void set(float x_, float y_, float r_, float g_, float b_, float a_) {
        x = x_;
        y = y_;
        r = r_;
        g = g_;
        b = b_;
        a = a_;
    }
};

QSGGeometry::Attribute MyPoint2D_Attributes[] = {
    QSGGeometry::Attribute::create(0, 2, FloatType, true),
    QSGGeometry::Attribute::create(1, 4, FloatType, false)
};

QSGGeometry::AttributeSet MyPoint2D_AttributeSet = {
    2,
    sizeof(MyPoint2D),
    MyPoint2D_Attributes
};

...

geometry = new QSGGeometry(MyPoint2D_AttributeSet, 2);
geometry->setDrawingMode(DrawLines);

MyPoint2D *vertices = static_cast<MyPoint2D *>(geometry->vertexData());
vertices[0].set(0, 0, 1, 0, 0, 1);
vertices[1].set(width(), height(), 0, 0, 1, 1);

在加速渲染方面,《QSGGeometry》是一个软件缓冲区和客户端,因为2D图形中使用的缓冲区通常由许多在每帧更改的小缓冲区组成,并不能从上传到图形内存中受益。然而,《QSGGeometry》支持使用setVertexDataPattern()setIndexDataPattern()函数向渲染器提示上传缓冲区。但是否尊重此提示取决于具体实现。

注意

所有带有QSG前缀的类都应该仅在与场景图渲染线程相关的场景图中使用。有关更多信息,请参阅场景图和渲染

另见

QSGGeometryNode 场景图 - 自定义几何图形

class AttributeType#

该枚举识别几种类属性。

常量

描述

QSGGeometry.UnknownAttribute

不考虑

QSGGeometry.PositionAttribute

位置

QSGGeometry.ColorAttribute

颜色

QSGGeometry.TexCoordAttribute

纹理坐标

QSGGeometry.TexCoord1Attribute

纹理坐标1

QSGGeometry.TexCoord2Attribute

纹理坐标2

class DataPattern#

用于指定在几何对象中垂直和索引数据的用法模式。

常量

描述

QSGGeometry.AlwaysUploadPattern

数据始终上传。这意味着用户在更改数据后无需显式标记索引和垂直数据为脏。这是默认值。

QSGGeometry.DynamicPattern

数据被重复修改并多次绘制。这是一个可能提供更好性能的提示。设置时,用户必须确保在修改数据后将其标记为脏。

QSGGeometry.StaticPattern

数据仅修改一次并多次绘制。这是一个可能提供更好性能的提示。设置时,用户必须确保在修改数据后将其标记为脏。

QSGGeometry.StreamPattern

数据几乎在每次绘制时都修改。这是一个可能提供更好性能的提示。设置后,用户必须确保在更改数据后将其标记为脏。

class DrawingMode#

(继承自enum.IntEnum)指定绘图模式,也称原始拓扑。

注意

从Qt 6开始,场景图只暴露所有支持3D图形API都支持的拓扑结构。因此,即使在运行时枚举值本身仍然存在,DrawLineLoopDrawTriangleFan 值也不再被Qt 6支持。

常量

描述

QSGGeometry.DrawPoints

QSGGeometry.DrawLines

QSGGeometry.DrawLineStrip

QSGGeometry.DrawTriangles

QSGGeometry.DrawTriangleStrip

classType#

指定顶点数据中的组件类型。

常量

描述

QSGGeometry.ByteType

QSGGeometry.UnsignedByteType

QSGGeometry.ShortType

QSGGeometry.UnsignedShortType

QSGGeometry.IntType

QSGGeometry.UnsignedIntType

QSGGeometry.FloatType

QSGGeometry.Bytes2Type

Qt 5.14中添加。

QSGGeometry.Bytes3Type

Qt 5.14中添加。

QSGGeometry.Bytes4Type

Qt 5.14中添加。

QSGGeometry.DoubleType

Qt 5.14中添加。

__init__(attribs, vertexCount[, indexCount=0[, indexType=QSGGeometry.Type.UnsignedShortType]])#
参数:
  • attribsAttributeSet

  • vertexCount – int

  • indexCount – int

  • indexType – int

基于attributes构建几何对象。

根据attributes中累计的大小,为vertexCount个顶点和indexCount分配空间。

indexType可以是UnsignedShortTypeUnsignedIntType。对于后者,取决于运行时使用的图形API实现,并且不一定总是可用。

几何对象默认使用DrawTriangleStrip作为绘制模式。

注意

必须保持所引用的attributes及其Attribute对象在QSGGeometry的整个生命周期内有效。 QSGGeometry 保存对attributes的引用,并且不删除Attribute对象。

allocate(vertexCount[, indexCount=0])#
参数:
  • vertexCount – int

  • indexCount – int

调整此几何对象的顶点和索引数据大小以适应vertexCount个顶点和indexCount个索引。

在此次调用之后,顶点和索引数据将被失效,调用者必须通过调用 node->markDirty( DirtyGeometry ) 将关联的几何节点标记为脏,以确保渲染器有机会更新内部缓冲区。

attributeCount()#
返回类型:

int

返回此几何体使用的属性集中的属性数量。

attributes()#
返回类型:

属性

返回一个包含此几何体属性的数组。数组的大小由 attributeCount() 提供的大小给出。

static defaultAttributes_ColoredPoint2D()#
返回类型:

属性集

便利函数,返回用于独立顶点着色2D绘制的属性。

static defaultAttributes_Point2D()#
返回类型:

属性集

便利函数,返回用于二维纯色绘制的属性。

static defaultAttributes_TexturedPoint2D()#
返回类型:

属性集

便利函数,返回用于纹理2D绘制的属性。

drawingMode()#
返回类型:

int

返回此几何体的绘图模式。

默认值是 DrawTriangleStrip .

indexCount()#
返回类型:

int

返回此几何对象中的索引数量。

indexData()#
返回类型:

void

返回指向该几何对象原始索引数据的指针。

indexDataAsUInt()#
返回类型:

uint

便利函数,以32位无符号整数不可变数组的格式访问索引数据。

indexDataAsUShort()#
返回类型:

quint16

便利函数,以16位无符号整数不可变数组的格式访问索引数据。

indexDataPattern()#
返回类型:

DataPattern

返回此几何体索引的使用模式。默认模式是 AlwaysUploadPattern

indexType()#
返回类型:

int

返回在此几何体对象中使用的原语类型的索引。

lineWidth()#
返回类型:

float

获取此几何体的当前线或点宽度,或用于此几何体的宽度。此属性仅适用于当 drawingModeDrawLinesDrawLineStrip 时线宽度。当支持时,当 drawingModeDrawPoints 时,也应用于点大小。

默认值为 1.0

注意

点线和绘制支持可能因平台和图形API而异,在运行时受限。例如,某些API不支持点精灵,因此无法设置大小为非1的值。

注意

1.0 的宽度始终受支持。

markIndexDataDirty()#

标记此几何体中的顶点已更改并且必须重新上传。

此函数仅在顶点使用模式为StaticData且渲染器将此几何体上传到顶点缓冲对象(VBOs)时才有作用。

markVertexDataDirty()#

标记此几何体中的顶点已更改并且必须重新上传。

此函数仅在顶点使用模式为StaticData且渲染器将此几何体上传到顶点缓冲对象(VBOs)时才有作用。

setDrawingMode(mode)#
参数:

mode – int

设置用于绘制此几何体的 mode

默认值是 DrawTriangleStrip .

setIndexDataPattern(p)#
参数:

pDataPattern

设置索引的用法模式为 p

默认是 AlwaysUploadPattern . 当设置为非默认值时,在改变索引数据后,除了调用 markIndexDataDirty() 外,还需要调用带有 DirtyGeometrymarkDirty()

setLineWidth(w)#
参数:

w – float

将此几何体使用的线或点宽度设置为 width 。此属性仅适用于当 drawingModeDrawLinesDrawLineStrip 时的线宽。当支持时,也可用于在 drawingModeDrawPoints 时的大小点。

注意

点线和绘制支持可能因平台和图形API而异,在运行时受限。例如,某些API不支持点精灵,因此无法设置大小为非1的值。

注意

1.0 的宽度始终受支持。

setVertexDataAsPoint2D(points)#
参数:

points – .list of QSGGeometry.Point2D

从 QSGGeometry.Point2D 列表设置顶点数据。列表的大小必须与 QSGGeometry.vertexCount() 返回的已分配顶点数量相匹配。

setVertexDataPattern(p)#
参数:

pDataPattern

将顶点的用法模式设置为 p

默认值为 AlwaysUploadPattern。当设置为默认值以外的任何值时,用户在更改顶点数据后,除了调用带有 markDirty()DirtyGeometry 的参数外,还必须调用 markVertexDataDirty()

sizeOfIndex()#
返回类型:

int

返回索引类型的字节大小。

此值为 `2,当索引类型为 `UnsignedShortType` 时;或者为 `4`,当索引类型为 `UnsignedIntType` 时。

sizeOfVertex()#
返回类型:

int

返回一个顶点的字节大小。

此值来自属性。

static updateColoredRectGeometry(g, rect)#
参数:

使用 rect 中的坐标更新几何对象 g

该函数假定几何对象中包含一个由 `ColoredPoint2D` 顶点组成的单一三角形条带。

static updateRectGeometry(g, rect)#
参数:

使用 rect 中的坐标更新几何对象 g

该函数假定几何对象包含一个由 `Point2D` 顶点组成的单一三角形条带。

static updateTexturedRectGeometry(g, rect, sourceRect)#
参数:

使用rect中的坐标和textureRect的纹理坐标更新几何形状g

textureRect应使用归一化坐标。

g假定是一个由四个顶点组成的三角形带,顶点类型为TexturedPoint2D

vertexCount()#
返回类型:

int

返回此几何对象中的顶点数。

vertexData()#
返回类型:

void

返回指向此几何对象原始顶点数据的指针。

vertexDataAsColoredPoint2D()#
返回类型:

彩色点2D

通过不可变的ColoredPoint2D数组访问顶点数据的便利函数。

vertexDataAsPoint2D()#
返回类型:

PyObject*

通过不可变的Point2D数组访问顶点数据的便利函数。

vertexDataAsTexturedPoint2D()#
返回类型:

纹理点2D

通过不可变的TexturedPoint2D数组访问顶点数据的便利函数。

vertexDataPattern()#
返回类型:

DataPattern

返回此几何中顶点的使用模式。默认模式为AlwaysUploadPattern