- class QSGGeometry#
QSGGeometry
类提供 Qt Quick 场景图(Qt Quick Scene Graph)中图形原语的低级别存储。概要#
方法#
def
__init__()
def
allocate()
def
attributeCount()
def
attributes()
def
drawingMode()
def
indexCount()
def
indexData()
def
indexType()
def
lineWidth()
def
setDrawingMode()
def
setLineWidth()
定义
vertexData()
静态函数#
注意
本文档可能包含从 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()
函数向渲染器提示上传缓冲区。但是否尊重此提示取决于具体实现。- 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都支持的拓扑结构。因此,即使在运行时枚举值本身仍然存在,
DrawLineLoop
和DrawTriangleFan
值也不再被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]])#
- 参数:
attribs –
AttributeSet
vertexCount – int
indexCount – int
indexType – int
基于
attributes
构建几何对象。根据
attributes
中累计的大小,为vertexCount
个顶点和indexCount
分配空间。indexType
可以是UnsignedShortType
或UnsignedIntType
。对于后者,取决于运行时使用的图形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()#
- 返回类型:
返回此几何体索引的使用模式。默认模式是
AlwaysUploadPattern
。- indexType()#
- 返回类型:
int
返回在此几何体对象中使用的原语类型的索引。
- lineWidth()#
- 返回类型:
float
获取此几何体的当前线或点宽度,或用于此几何体的宽度。此属性仅适用于当
drawingMode
为DrawLines
或DrawLineStrip
时线宽度。当支持时,当drawingMode
为DrawPoints
时,也应用于点大小。默认值为
1.0
注意
点线和绘制支持可能因平台和图形API而异,在运行时受限。例如,某些API不支持点精灵,因此无法设置大小为非1的值。
- markIndexDataDirty()#
标记此几何体中的顶点已更改并且必须重新上传。
此函数仅在顶点使用模式为StaticData且渲染器将此几何体上传到顶点缓冲对象(VBOs)时才有作用。
- markVertexDataDirty()#
标记此几何体中的顶点已更改并且必须重新上传。
此函数仅在顶点使用模式为StaticData且渲染器将此几何体上传到顶点缓冲对象(VBOs)时才有作用。
- setDrawingMode(mode)#
- 参数:
mode – int
设置用于绘制此几何体的
mode
。默认值是
DrawTriangleStrip
.- setIndexDataPattern(p)#
- 参数:
p –
DataPattern
设置索引的用法模式为
p
。默认是
AlwaysUploadPattern
. 当设置为非默认值时,在改变索引数据后,除了调用markIndexDataDirty()
外,还需要调用带有DirtyGeometry
的markDirty()
。- setLineWidth(w)#
- 参数:
w – float
将此几何体使用的线或点宽度设置为
width
。此属性仅适用于当drawingMode
是DrawLines
或DrawLineStrip
时的线宽。当支持时,也可用于在drawingMode
是DrawPoints
时的大小点。注意
点线和绘制支持可能因平台和图形API而异,在运行时受限。例如,某些API不支持点精灵,因此无法设置大小为非1的值。
- setVertexDataAsPoint2D(points)#
- 参数:
points – .list of QSGGeometry.Point2D
从 QSGGeometry.Point2D 列表设置顶点数据。列表的大小必须与 QSGGeometry.vertexCount() 返回的已分配顶点数量相匹配。
- setVertexDataPattern(p)#
- 参数:
p –
DataPattern
将顶点的用法模式设置为
p
。默认值为
AlwaysUploadPattern
。当设置为默认值以外的任何值时,用户在更改顶点数据后,除了调用带有markDirty()
和DirtyGeometry
的参数外,还必须调用markVertexDataDirty()
。- sizeOfIndex()#
- 返回类型:
int
返回索引类型的字节大小。
此值为 `
2
,当索引类型为 `UnsignedShortType
` 时;或者为 `4
`,当索引类型为 `UnsignedIntType
` 时。- sizeOfVertex()#
- 返回类型:
int
返回一个顶点的字节大小。
此值来自属性。
- static updateColoredRectGeometry(g, rect)#
- 参数:
g –
QSGGeometry
rect –
QRectF
使用
rect
中的坐标更新几何对象g
。该函数假定几何对象中包含一个由 `
ColoredPoint2D
` 顶点组成的单一三角形条带。- static updateRectGeometry(g, rect)#
- 参数:
g –
QSGGeometry
rect –
QRectF
使用
rect
中的坐标更新几何对象g
。该函数假定几何对象包含一个由 `
Point2D
` 顶点组成的单一三角形条带。- static updateTexturedRectGeometry(g, rect, sourceRect)#
- 参数:
g –
QSGGeometry
rect –
QRectF
sourceRect –
QRectF
使用rect中的坐标和textureRect的纹理坐标更新几何形状
g
。textureRect
应使用归一化坐标。g
假定是一个由四个顶点组成的三角形带,顶点类型为TexturedPoint2D
。- vertexCount()#
- 返回类型:
int
返回此几何对象中的顶点数。
- vertexData()#
- 返回类型:
void
返回指向此几何对象原始顶点数据的指针。
- vertexDataAsColoredPoint2D()#
- 返回类型:
彩色点2D
通过不可变的
ColoredPoint2D
数组访问顶点数据的便利函数。- vertexDataAsPoint2D()#
- 返回类型:
PyObject*
通过不可变的
Point2D
数组访问顶点数据的便利函数。- vertexDataAsTexturedPoint2D()#
- 返回类型:
纹理点2D
通过不可变的
TexturedPoint2D
数组访问顶点数据的便利函数。- vertexDataPattern()#
- 返回类型:
返回此几何中顶点的使用模式。默认模式为
AlwaysUploadPattern
。