QCustom3DVolume 类

QCustom3DVolume 类向图形添加了体积渲染对象。 更多...

头文件 #include <QCustom3DVolume>
CMakefind_package(Qt6 REQUIRED COMPONENTS Graphs)
target_link_libraries(mytarget PRIVATE Qt6::Graphs)
qmakeQT += graphs
实例化自 Custom3DVolume
继承自 QCustom3DItem
状态技术预览

属性

公共函数

QCustom3DVolume(QObject *parent = nullptr)
QCustom3DVolume(const QVector3D &position, const QVector3D &scaling, const QQuaternion &rotation, int textureWidth, int textureHeight, int textureDepth, QList<uchar> *textureData, QImage::Format textureFormat, const QList<QRgb> &colorTable, QObject *parent = nullptr)
virtual~QCustom3DVolume() override
floatalphaMultiplier() const
QList<QRgb>colorTable() const
QList<uchar> *createTextureData(const QList<QImage *> &images)
booldrawSliceFrames() const
booldrawSlices() const
boolpreserveOpacity() const
QImagerenderSlice(Qt::Axis axis, int index)
voidsetAlphaMultiplier(float mult)
voidsetColorTable(const QList    colors)
voidsetDrawSliceFrames(bool enable)
voidsetDrawSlices(bool enable)
voidsetPreserveOpacity(bool enable)
voidsetSliceFrameColor(const QColor &color)
voidsetSliceFrameGaps(const QVector3D &values)
voidsetSliceFrameThicknesses(const QVector3D &values)
voidsetSliceFrameWidths(const QVector3D &values)
voidsetSliceIndexX(int value)
voidsetSliceIndexY(int value)
voidsetSliceIndexZ(int value)
voidsetSliceIndices(int x, int y, int z)
voidsetSubTextureData(Qt::Axis axis, int index, const uchar *data)
voidsetSubTextureData(Qt::Axis axis, int index, const QImage &image)
voidsetTextureData(QList *data)
voidsetTextureDepth(int value)
voidsetTextureDimensions(int width, int height, int depth)
voidsetTextureFormat(QImage::Format format)
voidsetTextureHeight(int value)
voidsetTextureWidth(int value)
voidsetUseHighDefShader(bool enable)
QColorsliceFrameColor() const
QVector3DsliceFrameGaps() const
QVector3DsliceFrameThicknesses() const
QVector3DsliceFrameWidths() const
intsliceIndexX() const
intsliceIndexY() const
intsliceIndexZ() const
QList<uchar> *textureData() const
inttextureDataWidth() const
inttextureDepth() const
QImage::FormattextureFormat() const
inttextureHeight() const
inttextureWidth() const
booluseHighDefShader() const

信令

voidalphaMultiplierChanged(float mult)
voidcolorTableChanged()
voiddrawSliceFramesChanged(bool enabled)
voiddrawSlicesChanged(bool enabled)
voidpreserveOpacityChanged(bool enabled)
voidsliceFrameColorChanged(const QColor &color)
voidsliceFrameGapsChanged(const QVector3D &values)
voidsliceFrameThicknessesChanged(const QVector3D &values)
voidsliceFrameWidthsChanged(const QVector3D &values)
voidsliceIndexXChanged(int value)
voidsliceIndexYChanged(int value)
voidsliceIndexZChanged(int value)
voidtextureDataChanged(QList<uchar> *data)
voidtextureDepthChanged(int value)
voidtextureFormatChanged(QImage::Format format)
voidtextureHeightChanged(int value)
voidtextureWidthChanged(int value)
voiduseHighDefShaderChanged(bool enabled)

详细描述

体渲染对象是一个带有3D纹理的盒子。对于体积,支持三个切片平面,每个位于体积的主要轴线上。

渲染体积对象性能很高,特别是在体积很大程度上透明的情况下,因为体积内容是光线追踪的。性能几乎与体积在屏幕上占用的像素数量成线性关系,所以以较小的视图显示体积或限制图表的缩放级别是提高性能的简单方法。同样,体积纹理尺寸对性能有很大影响。如果帧率比体内容的高保真渲染更重要,请考虑通过将useHighDefShader属性设置为false来关闭高性能着色器。

注意:三维对象使用3D纹理,而OpenGL ES2环境中不支持。

另请参阅QAbstract3DGraph::addCustomItem()和useHighDefShader

属性文档

alphaMultiplier : float

此属性保存了在渲染时间与体积纹理每个纹理元素的alpha值相乘的值。

此属性可用于向体积引入均匀的不透明度。如果preserveOpacitytrue,则只有初始至少有一些透明度的纹理元素受到影响,完全不透明的纹理元素不受影响。值不能为负。默认为1.0f

访问函数

floatalphaMultiplier() const
voidsetAlphaMultiplier(float mult)

通知信号

voidalphaMultiplierChanged(float mult)

另请参阅preserveOpacitytextureData

colorTable : QList<QRgb>

此属性保存包含索引纹理格式颜色的数组。

如果纹理格式不是索引的,则此数组不使用,可为空。

默认为0

访问函数

QList<QRgb>colorTable() const
voidsetColorTable(const QList<QRgb> &colors)

通知信号

voidcolorTableChanged()

另请参阅textureDatasetTextureFormat()和QImage::colorTable

drawSliceFrames : bool

此属性保存是否在体积周围绘制切片框架。

如果此属性值为true,则切片索引属性指示的切片的框架将在体积周围绘制。如果为false,则不会绘制切片框架。

绘制切片框架与绘制切片是独立的,因此您可以在显示整个体积的同时绘制绕其周围的切片框架。这在使用renderSlice()在外部显示切片时很有用。

默认值为false

访问函数

booldrawSliceFrames() const
voidsetDrawSliceFrames(bool enable)

通知信号

voiddrawSliceFramesChanged(bool enabled)

另请参阅sliceIndexXsliceIndexYsliceIndexZdrawSlicesrenderSlice

drawSlices : bool

此属性表示是否绘制指定的切片而非整个体积。

如果此属性值为true,则切片索引属性指示的切片将绘制,而不是整个体积。如果为false,则始终绘制整个体积。默认值为false

注意:切片始终沿着项轴绘制,因此如果项目旋转,切片将相应旋转。

访问函数

booldrawSlices() const
voidsetDrawSlices(bool enable)

通知信号

voiddrawSlicesChanged(bool enabled)

另请参阅sliceIndexXsliceIndexYsliceIndexZ

preserveOpacity : bool

此属性表示是否将alpha乘数应用到所有texel。

如果此属性值为true,则alphaMultiplier只应用于具有某些透明度的texel。如果为false,则乘数应用于所有texel的alpha值。默认值为true

访问函数

boolpreserveOpacity() const
voidsetPreserveOpacity(bool enable)

通知信号

voidpreserveOpacityChanged(bool enabled)

另请参阅alphaMultiplier

sliceFrameColor : QColor

此属性存储切片框架的颜色。

不支持透明切片框架颜色。

默认值为黑色。

访问函数

QColorsliceFrameColor() const
voidsetSliceFrameColor(const QColor &color)

通知信号

voidsliceFrameColorChanged(const QColor &color)

另请参阅drawSliceFrames

sliceFrameGaps : QVector3D

此属性表示在每个维度中体积本身与框架之间的空隙大小。

不同维度上的间隙可以不同。这些值是相同维度体积厚度的分数。值不能为负。

默认值为QVector3D(0.01, 0.01, 0.01)

访问函数

QVector3DsliceFrameGaps() const
voidsetSliceFrameGaps(const QVector3D &values)

通知信号

voidsliceFrameGapsChanged(const QVector3D &values)

另请参阅drawSliceFrames

sliceFrameThicknesses : QVector3D

该属性存储了每个方向切片框架的厚度。

这些值是该方向体积厚度的分数。值不能为负。

默认值为QVector3D(0.01, 0.01, 0.01)

访问函数

QVector3DsliceFrameThicknesses() const
voidsetSliceFrameThicknesses(const QVector3D &values)

通知信号

voidsliceFrameThicknessesChanged(const QVector3D &values)

另请参阅drawSliceFrames

sliceFrameWidths : QVector3D

该属性存储切片框架的宽度。

不同维度上的宽度可以不同,例如,您可以通过将该维度的值设为零来省略渲染某些侧面的框架。这些值是该维度体积厚度的分数。值不能为负。

默认值为QVector3D(0.01, 0.01, 0.01)

访问函数

QVector3DsliceFrameWidths() const
voidsetSliceFrameWidths(const QVector3D &values)

通知信号

voidsliceFrameWidthsChanged(const QVector3D &values)

另请参阅drawSliceFrames

sliceIndexX : int

该属性存储了纹理数据中的x维度索引,表示要显示哪个垂直切片。

将任何维度设置为负值表示不绘制该维度的切片或切片框架。如果所有维度都是负值,则不绘制切片或切片框架,并以正常方式绘制体积。

默认值 -1

访问函数

intsliceIndexX() const
voidsetSliceIndexX(int value)

通知信号

voidsliceIndexXChanged(int value)

另见 textureDatadrawSlices,以及drawSliceFrames

sliceIndexY : int

该属性存储了纹理数据中的y维度索引,表示要显示哪个水平切片。

将任何维度设置为负值表示不绘制该维度的切片或切片框架。如果所有维度都是负值,则不绘制切片或切片框架,并以正常方式绘制体积。

默认值 -1

访问函数

intsliceIndexY() const
voidsetSliceIndexY(int value)

通知信号

voidsliceIndexYChanged(int value)

另见 textureDatadrawSlices,以及drawSliceFrames

sliceIndexZ : int

该属性存储了纹理数据中的z维度索引,表示要显示哪个垂直切片。

将任何维度设置为负值表示不绘制该维度的切片或切片框架。如果所有维度都是负值,则不绘制切片或切片框架,并以正常方式绘制体积。

默认值 -1

访问函数

intsliceIndexZ() const
voidsetSliceIndexZ(int value)

通知信号

voidsliceIndexZChanged(int value)

另见 textureDatadrawSlices,以及drawSliceFrames

textureData : QList<uchar>*

该属性存储了包含根据textureFormat指定的格式的纹理数据的数组。

此数组的大小必须至少为 (textureDataWidth * textureHeight * textureDepth * texture format color depth in bytes)。

3D纹理由一叠2D子纹理组成。每个子纹理必须具有相同的大小 (textureDataWidth * textureHeight),堆叠的深度由textureDepth属性定义。每个2D纹理中的数据与具有相同格式的QImage数据相同,因此可以使用QImage::bits()为每个子纹理提供数据。

新数组的所有权转移到QCustom3DVolume实例。如果设置了另一个数组,则之前的数组将被删除。如果再次设置相同的数组,则假定数组内容已更改,并触发图形渲染。

注意:数据的x维度每一行都需要32位对齐。如果textureFormatQImage::Format_Indexed8,并且textureWidth的值不能被4整除,可能需要在数据每一行的x维度添加填充字节。该textureDataWidth()函数返回填充字节的数量。填充字节应指示完全透明的颜色,以避免渲染伪影。

默认为0

访问函数

QList<uchar> *textureData() const
voidsetTextureData(QList<uchar> *data)

通知信号

voidtextureDataChanged(QList<uchar> *data)

另请参阅colorTablesetTextureFormatsetSubTextureDatatextureDataWidth

textureDepth : int

此属性保持定义体内容深度的3D纹理的深度(以像素为单位)。

默认为0

注意:如果更改此值,可能需要调整或重新创建textureData值。默认为0

访问函数

inttextureDepth() const
voidsetTextureDepth(int value)

通知信号

voidtextureDepthChanged(int value)

另请参阅:textureDatatextureWidthtextureHeightsetTextureFormat

textureHeight : int

此属性保持定义体高度3D纹理的高度(以像素为单位)。

默认为0

注意:如果更改此值,可能需要调整或重新创建textureData值。默认为0

访问函数

inttextureHeight() const
voidsetTextureHeight(int value)

通知信号

voidtextureHeightChanged(int value)

另请参阅:textureDatatextureWidthtextureDepthsetTextureFormat

textureWidth : int

此属性保持定义体宽度3D纹理的宽度(以像素为单位)。

默认为0

注意:如果更改此值,可能需要调整或重新创建textureData值。默认为0

访问函数

inttextureWidth() const
voidsetTextureWidth(int value)

通知信号

voidtextureWidthChanged(int value)

另请参阅:textureDatatextureHeighttextureDepthsetTextureFormattextureDataWidth

useHighDefShader : bool

此属性保持是否使用高定义 shady 或低定义 shady 来渲染体。

如果此属性值为true,则使用高定义 shiny。如果它是false,则使用低定义 shiny。

高清晰度着色器确保在渲染体积纹理时采样到体积中每个可见的texel。低清晰度着色器只渲染体积内容的粗糙近似,但帧率要高得多。低清晰度着色器不保证采样到体积纹理中的每个texel,因此如果体积包含明显的细小特征,可能会出现闪烁。

注意:该值不影响渲染体积切片时的细节级别。

默认为true

访问函数

booluseHighDefShader() const
voidsetUseHighDefShader(bool enable)

通知信号

voiduseHighDefShaderChanged(bool enabled)

另请参阅:renderSlice()。

成员函数文档

[显式] QCustom3DVolume::QCustom3DVolume(QObject *parent = nullptr)

使用给定的父对象构建自定义3D体积。

[显式] QCustom3DVolume::QCustom3DVolume(const QVector3D &position, const QVector3D &scaling, const QQuaternion &rotation, int textureWidth, int textureHeight, int textureDepth, QList<uchar> *textureData, QImage::Format textureFormat, const QList<QRgb> &colorTable, QObject *parent = nullptr)

使用给定的位置缩放旋转纹理宽度纹理高度纹理深度纹理数据纹理格式颜色表和可选的父对象构建自定义3D体积。

另请参阅:textureDatasetTextureFormat() 和 colorTable

[重写虚拟非抛出] QCustom3DVolume::~QCustom3DVolume()

删除自定义3D体积。

QList<uchar> *QCustom3DVolume::createTextureData(const QList<QImage *> &images)

从一个图像数组创建一个新的纹理数据数组,并将其设置为该体积对象的textureData。纹理的尺寸也根据图像和数组尺寸设置。数组中的所有图像必须具有相同的大小。如果图像不是QImage::Format_Indexed8格式,所有纹理数据将转换为QImage::Format_ARGB32格式。如果图像为QImage::Format_Indexed8格式,整个体积的colorTable值将从第一张图像中获取。

返回新创建的数组的指针。

参见 textureDatatextureWidthtextureHeighttextureDepthsetTextureFormat

QImage QCustom3DVolume::renderSlice(Qt::Axis axis, int index)

将指定轴 axis 上索引为 index 的切片渲染到图像中。使用此对象的可纹理格式。

返回切片的渲染图像,如果指定的索引无效,则返回空图像。

参见 setTextureFormat

void QCustom3DVolume::setSliceIndices(int x, int y, int z)

一次设置三个切片索引(xyz)的便捷函数。

参照 textureData

void QCustom3DVolume::setSubTextureData(Qt::Axis axis, int index, const uchar *data)

设置沿指定 axis 的 3D 纹理的单个 2D 子纹理。参数 index 指定要设置的子纹理。纹理 data 必须按照 textureFormat 属性指定的格式,并且大小为体积纹理的截面乘以纹理格式的颜色深度(以字节为单位)。预期的 data 应按与 renderSlice() 方法在同一轴上产生的图像中的数据相似排列。

注意:当针对 y 轴或 z 轴时,数据中的每个 x 维度行需要32位对齐。如果 textureFormatQImage::Format_Indexed8textureWidth 的值不能被四整除,则可能需要在 data 的每个 x 维度行添加填充字节以正确对齐。填充字节应表示完全透明的颜色,以避免渲染伪影。

参照 textureDatarenderSlice

void QCustom3DVolume::setSubTextureData(Qt::Axis axis, int index, const QImage &image)

在沿指定的体积中设置单个 2D 子纹理。索引参数指定要设置的子纹理。如果textureFormat是索引类型,则源图像必须使用textureFormat属性指定的格式。如果textureFormatQImage::Format_ARGB32,则图像将被转换为该格式。图像的大小必须与沿指定轴的体积纹理的横截面相匹配。图像的方向应与renderSlice()方法沿同一轴生成的切片图像的方向相对应。

注意:当目标为y轴或z轴时,数据的每个x维度行需要是32位对齐的。如果textureFormatQImage::Format_Indexed8textureWidth的值不能被四整除,则可能需要在图像的每个x维度行中添加填充字节以正确对齐。填充字节应表示完全透明的颜色以避免渲染伪影。不能保证QImage将自动执行此操作。

参照 textureDatarenderSlice

void QCustom3DVolume::setTextureDimensions(int width, int height, int depth)

一次设置所有三个纹理维度(宽度高度深度)的便捷函数。

参照 textureData

void QCustom3DVolume::setTextureFormat(QImage::Format format)

textureData属性的格式设置为format。目前支持两种格式:QImage::Format_Indexed8QImage::Format_ARGB32。如果指定索引格式,必须设置colorTable。默认为QImage::Format_ARGB32

另请参阅:textureFormat()、colorTabletextureData

int QCustom3DVolume::textureDataWidth() const

返回实际纹理数据的宽度。当纹理格式为QImage::Format_Indexed8时,此值等于对32位边界对齐的textureWidth。否则,此值等于textureWidth的四倍。

QImage::Format QCustom3DVolume::textureFormat() const

返回textureData属性值的格式。

参见 setTextureFormat

[信号] void QCustom3DVolume::textureFormatChanged(QImage::Format format)

textureData值的format发生变化时发出此信号。

参见 setTextureFormat

© 2024 Qt公司有限公司。本文档中包含的文档贡献归各自所有者所有。本提供的文档按照自由软件开发基金会发布、根据GNU自由文档许可版1.3许可条款获得许可。Qt及其相关标志是芬兰以及全球其他地区的Qt公司所有。所有其他商标归各自所有者所有。