QCustom3DVolume Class
QCustom3DVolume クラスは、グラフにボリュームレンダリングされたオブジェクトを追加します。詳細...
| ヘッダー: | #include <QCustom3DVolume> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Graphs) target_link_libraries(mytarget PRIVATE Qt6::Graphs) |
| qmake: | QT += graphs |
| QML内: | Custom3DVolume |
| 継承元: | QCustom3DItem |
- 継承されたメンバを含むすべてのメンバの一覧
- QCustom3DVolumeは、Qt Graphs の3D用C++クラスの一部です。
プロパティ
|
|
パブリック関数
| QCustom3DVolume(QObject *parent = nullptr) | |
| QCustom3DVolume(QVector3D position, 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 |
| float | alphaMultiplier() const |
| QList<QRgb> | colorTable() const |
| QList<uchar> * | createTextureData(const QList<QImage *> &images) |
| bool | drawSliceFrames() const |
| bool | drawSlices() const |
| bool | preserveOpacity() const |
| QImage | renderSlice(Qt::Axis axis, int index) |
| void | setAlphaMultiplier(float mult) |
| void | setColorTable(const QList<QRgb> &colors) |
| void | setDrawSliceFrames(bool enable) |
| void | setDrawSlices(bool enable) |
| void | setPreserveOpacity(bool enable) |
| void | setSliceFrameColor(QColor color) |
| void | setSliceFrameGaps(QVector3D values) |
| void | setSliceFrameThicknesses(QVector3D values) |
| void | setSliceFrameWidths(QVector3D values) |
| void | setSliceIndexX(int value) |
| void | setSliceIndexY(int value) |
| void | setSliceIndexZ(int value) |
| void | setSliceIndices(int x, int y, int z) |
| void | setSubTextureData(Qt::Axis axis, int index, const QImage &image) |
| void | setSubTextureData(Qt::Axis axis, int index, const uchar *data) |
| void | setTextureData(QList<uchar> *data) |
| void | setTextureDepth(int value) |
| void | setTextureDimensions(int width, int height, int depth) |
| void | setTextureFormat(QImage::Format format) |
| void | setTextureHeight(int value) |
| void | setTextureWidth(int value) |
| void | setUseHighDefShader(bool enable) |
| QColor | sliceFrameColor() const |
| QVector3D | sliceFrameGaps() const |
| QVector3D | sliceFrameThicknesses() const |
| QVector3D | sliceFrameWidths() const |
| int | sliceIndexX() const |
| int | sliceIndexY() const |
| int | sliceIndexZ() const |
| QList<uchar> * | textureData() const |
| int | textureDataWidth() const |
| int | textureDepth() const |
| QImage::Format | textureFormat() const |
| int | textureHeight() const |
| int | textureWidth() const |
| bool | useHighDefShader() const |
シグナル
| void | alphaMultiplierChanged(float mult) |
| void | colorTableChanged() |
| void | drawSliceFramesChanged(bool enabled) |
| void | drawSlicesChanged(bool enabled) |
| void | preserveOpacityChanged(bool enabled) |
| void | sliceFrameColorChanged(QColor color) |
| void | sliceFrameGapsChanged(QVector3D values) |
| void | sliceFrameThicknessesChanged(QVector3D values) |
| void | sliceFrameWidthsChanged(QVector3D values) |
| void | sliceIndexXChanged(int value) |
| void | sliceIndexYChanged(int value) |
| void | sliceIndexZChanged(int value) |
| void | textureDataChanged(QList<uchar> *data) |
| void | textureDepthChanged(int value) |
| void | textureFormatChanged(QImage::Format format) |
| void | textureHeightChanged(int value) |
| void | textureWidthChanged(int value) |
| void | useHighDefShaderChanged(bool enabled) |
詳細な説明
ボリュームレンダリングされたオブジェクトは、3Dテクスチャを持つボックスです。このボリュームに対しては、3つのスライス平面がサポートされており、それぞれがボリュームの各主軸に沿っています。
ボリュームオブジェクトのレンダリングは、特にボリュームが大部分透明である場合、ボリュームの内容がレイトレーシングされるため、非常に負荷が高くなります。パフォーマンスは、画面上でボリュームが占めるピクセル数にほぼ線形に比例するため、ビューを小さく表示したり、グラフのズームレベルを制限したりすることが、パフォーマンスを向上させる簡単な方法です。 同様に、ボリュームテクスチャのサイズもパフォーマンスに大きな影響を与えます。ボリュームの内容をピクセル単位で正確にレンダリングすることよりもフレームレートを優先する場合は、useHighDefShader プロパティをfalse に設定して、高精細シェーダーを無効にすることを検討してください。
注:ボリューム オブジェクトは 3D テクスチャを利用しますが、これは OpenGL ES2 環境ではサポートされていません。
注: サポートされているフォーマットは、「QImage::Format_Indexed8 」と「QImage::Format_ARGB32 」の 2つだけです 。インデックス付きフォーマットを指定する場合は、colorTable も設定する必要があります。デフォルトは「QImage::Format_ARGB32 」です。
Q3DGraphsWidgetItem::addCustomItem() およびuseHighDefShaderも参照してください 。
プロパティのドキュメント
alphaMultiplier : float
このプロパティには、レンダリング時にボリュームテクスチャの各テクセルのアルファ値に掛けられる値が格納されます。
このプロパティを使用すると、ボリューム全体に均一な透明度を適用できます。preserveOpacity がtrue の場合、最初からある程度の透明度を持つテクセルのみが影響を受け、完全に不透明なテクセルは影響を受けません。値は負にしてはなりません。デフォルトは1.0f です。
アクセス関数:
| float | alphaMultiplier() const |
| void | setAlphaMultiplier(float mult) |
通知シグナル:
| void | alphaMultiplierChanged(float mult) |
preserveOpacity およびtextureDataも参照してください 。
colorTable : QList<QRgb>
このプロパティは、インデックス付きテクスチャ形式用の色を含む配列を保持します。
テクスチャ形式がインデックス付きでない場合、この配列は使用されず、空でもかまいません。
デフォルト値は0 です。
アクセス関数:
| QList<QRgb> | colorTable() const |
| void | setColorTable(const QList<QRgb> &colors) |
通知シグナル:
| void | colorTableChanged() |
関連項目: ` textureData`、`setTextureFormat()`、および `QImage::colorTable()`。
drawSliceFrames : bool
このプロパティは、ボリュームの周囲にスライス枠が描画されるかどうかを指定します。
このプロパティの値がtrue の場合、スライスインデックスプロパティで指定されたスライスの枠線がボリュームの周囲に描画されます。false の場合、スライスの枠線は描画されません。
スライス枠の描画はスライスの描画とは独立しているため、ボリューム全体を表示しながら、その周囲にスライス枠を描画することができます。これは、renderSlice() を使用してグラフ自体の外側にスライスを表示する場合に便利です。
デフォルトはfalse です。
アクセス関数:
| bool | drawSliceFrames() const |
| void | setDrawSliceFrames(bool enable) |
通知シグナル:
| void | drawSliceFramesChanged(bool enabled) |
関連項目: sliceIndexX 、sliceIndexY 、sliceIndexZ 、drawSlices 、およびrenderSlice()。
drawSlices : bool
このプロパティは、ボリューム全体ではなく、指定されたスライスが描画されるかどうかを指定します。
このプロパティの値が `true` の場合、スライスインデックスプロパティで指定されたスライスが、ボリューム全体に代わって描画されます。`false` の場合、常にボリューム全体が描画されます。デフォルトは `false` です。
注:スライスは 常にアイテムの軸に沿って描画されるため、アイテムが回転すると、スライスも同様に回転します。
アクセス関数:
| bool | drawSlices() const |
| void | setDrawSlices(bool enable) |
通知シグナル:
| void | drawSlicesChanged(bool enabled) |
関連項目: sliceIndexX 、sliceIndexY 、およびsliceIndexZ 。
preserveOpacity : bool
このプロパティは、アルファ乗数がすべてのテクセルに適用されるかどうかを指定します。
このプロパティの値がtrue の場合、alphaMultiplier は、すでに何らかの透明度を持つテクセルにのみ適用されます。false の場合、乗数はすべてのテクセルのアルファ値に適用されます。デフォルトはtrue です。
アクセス関数:
| bool | preserveOpacity() const |
| void | setPreserveOpacity(bool enable) |
通知シグナル:
| void | preserveOpacityChanged(bool enabled) |
alphaMultiplierも参照してください 。
sliceFrameColor : QColor
このプロパティは、スライスフレームの色を指定します。
透明なスライス枠の色はサポートされていません。
デフォルトは黒です。
アクセス関数:
| QColor | sliceFrameColor() const |
| void | setSliceFrameColor(QColor color) |
通知シグナル:
| void | sliceFrameColorChanged(QColor color) |
関連項目: drawSliceFrames 。
sliceFrameGaps : QVector3D
このプロパティは、ボリューム本体とフレームの間に各方向に残されるエアギャップのサイズを保持します。
この隙間は、各方向ごとに異なる値に設定できます。値は、同じ方向におけるボリュームの厚さに対する割合で指定します。値は負の数値にすることはできません。
デフォルト値はQVector3D(0.01, 0.01, 0.01) です。
アクセス関数:
| QVector3D | sliceFrameGaps() const |
| void | setSliceFrameGaps(QVector3D values) |
通知信号:
| void | sliceFrameGapsChanged(QVector3D values) |
関連項目: drawSliceFrames 。
sliceFrameThicknesses : QVector3D
このプロパティには、各次元におけるスライスフレームの厚さが格納されます。
値は、同じ次元における体積厚さの割合で表されます。値は負になることはできません。
デフォルト値はQVector3D(0.01, 0.01, 0.01) です。
アクセス関数:
| QVector3D | sliceFrameThicknesses() const |
| void | setSliceFrameThicknesses(QVector3D values) |
通知信号:
| void | sliceFrameThicknessesChanged(QVector3D values) |
「drawSliceFrames」も参照してください 。
sliceFrameWidths : QVector3D
このプロパティは、スライスフレームの幅を指定します。
幅は各方向ごとに異なるため、例えば、ある方向の値をゼロに設定することで、ボリュームの特定の方向におけるフレームの描画を省略することができます。値は、その方向におけるボリュームの厚さの分数で指定します。値は負にすることはできません。
デフォルト値はQVector3D(0.01, 0.01, 0.01) です。
アクセス関数:
| QVector3D | sliceFrameWidths() const |
| void | setSliceFrameWidths(QVector3D values) |
通知信号:
| void | sliceFrameWidthsChanged(QVector3D values) |
「drawSliceFrames」も参照してください 。
sliceIndexX : int
このプロパティは、どの垂直スライスを表示するかを示す、テクスチャデータ内のx方向のインデックスを保持します。
いずれかの次元を負の値に設定すると、その次元に対応するスライスまたはスライスフレームは描画されません。すべての次元が負の値の場合、スライスおよびスライスフレームは一切描画されず、ボリュームが通常通り描画されます。
デフォルト値は-1 です。
アクセス関数:
| int | sliceIndexX() const |
| void | setSliceIndexX(int value) |
通知シグナル:
| void | sliceIndexXChanged(int value) |
関連項目: textureData 、drawSlices 、およびdrawSliceFrames 。
sliceIndexY : int
このプロパティは、テクスチャデータ内のY方向のインデックスを保持しており、どの水平スライスを表示するかを指定します。
いずれかの次元を負の値に設定すると、その次元に対応するスライスまたはスライスフレームは描画されません。すべての次元が負の値の場合、スライスやスライスフレームは一切描画されず、ボリュームは通常通り描画されます。
デフォルト値は-1 です。
アクセス関数:
| int | sliceIndexY() const |
| void | setSliceIndexY(int value) |
通知シグナル:
| void | sliceIndexYChanged(int value) |
関連項目: textureData 、drawSlices 、およびdrawSliceFrames 。
sliceIndexZ : int
このプロパティは、どの垂直スライスを表示するかを示す、テクスチャデータ内のZ方向のインデックスを保持します。
いずれかの次元を負の値に設定すると、その次元に対応するスライスまたはスライス枠は描画されません。すべての次元が負の値の場合、スライスやスライス枠は一切描画されず、ボリュームは通常通り描画されます。
デフォルト値は-1 です。
アクセス関数:
| int | sliceIndexZ() const |
| void | setSliceIndexZ(int value) |
通知シグナル:
| void | sliceIndexZChanged(int value) |
関連項目: textureData 、drawSlices 、および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 ビット単位でアラインされている必要があります。textureFormat がQImage::Format_Indexed8 であり、textureWidth の値が 4 で割り切れない場合、data の各 x 次元行にパディングバイトを追加する必要がある場合があります。textureDataWidth() 関数は、パディングされたバイト数を返します。 レンダリング上の不具合を避けるため、パディングバイトには完全に透明な色を指定する必要があります。
デフォルトは0 です。
アクセス関数:
| QList<uchar> * | textureData() const |
| void | setTextureData(QList<uchar> *data) |
通知シグナル:
| void | textureDataChanged(QList<uchar> *data) |
関連項目: colorTable 、setTextureFormat()、setSubTextureData()、およびtextureDataWidth()。
textureDepth : int
このプロパティは、ボリュームの内容を定義する3Dテクスチャの深度をピクセル単位で保持します。
デフォルト値は0 です。
注: この値を変更した場合、textureData の サイズ変更や再作成が必要になる場合があります。デフォルト値 は0 です。
アクセス関数:
| int | textureDepth() const |
| void | setTextureDepth(int value) |
通知シグナル:
| void | textureDepthChanged(int value) |
関連項目: textureData 、textureWidth 、textureHeight 、およびsetTextureFormat()。
textureHeight : int
このプロパティは、ボリュームの内容を定義する3Dテクスチャの高さをピクセル単位で保持します。
デフォルト値は0 です。
注: この値を変更した場合、textureData の サイズ変更または再作成が必要になる場合があります。デフォルト値 は0 です。
アクセス関数:
| int | textureHeight() const |
| void | setTextureHeight(int value) |
通知シグナル:
| void | textureHeightChanged(int value) |
関連項目: textureData 、textureWidth 、textureDepth 、およびsetTextureFormat()。
textureWidth : int
このプロパティは、ボリュームの内容を定義する3Dテクスチャの幅(ピクセル単位)を保持します。
デフォルト値は0 です。
注: この値を変更した場合、textureData の サイズ変更または再作成が必要になる場合があります。デフォルト値 は0 です。
アクセス関数:
| int | textureWidth() const |
| void | setTextureWidth(int value) |
通知シグナル:
| void | textureWidthChanged(int value) |
関連項目: textureData 、textureHeight 、textureDepth 、setTextureFormat()、およびtextureDataWidth()。
useHighDefShader : bool
このプロパティは、ボリュームのレンダリングに高解像度シェーダーと低解像度シェーダーのどちらが使用されるかを指定します。
このプロパティの値がtrue の場合、高解像度シェーダーが使用されます。false の場合、低解像度シェーダーが使用されます。
高解像度シェーダーを使用すると、ボリュームのレンダリング時に、ボリュームテクスチャの可視テクセルがすべてサンプリングされることが保証されます。 低解像度のシェーダーは、ボリュームの内容を大まかに近似してレンダリングしますが、フレームレートははるかに高くなります。低解像度のシェーダーでは、ボリュームテクスチャのすべてのテクセルがサンプリングされるとは限らないため、ボリュームに明確な細部の特徴が含まれている場合、ちらつきが生じる可能性があります。
注:この 値は 、ボリュームのスライスをレンダリングする際のディテールレベルには影響しません。
デフォルトは「true 」です。
アクセス関数:
| bool | useHighDefShader() const |
| void | setUseHighDefShader(bool enable) |
通知シグナル:
| void | useHighDefShaderChanged(bool enabled) |
関連項目: renderSlice()。
メンバ関数のドキュメント
[explicit] QCustom3DVolume::QCustom3DVolume(QObject *parent = nullptr)
指定されたparent を使用して、カスタム3Dボリュームを構築します。
[explicit] QCustom3DVolume::QCustom3DVolume(QVector3D position, QVector3D scaling, const QQuaternion &rotation, int textureWidth, int textureHeight, int textureDepth, QList<uchar> *textureData, QImage::Format textureFormat, const QList<QRgb> &colorTable, QObject *parent = nullptr)
指定されたposition 、scaling 、rotation 、textureWidth 、textureHeight 、textureDepth 、textureData 、textureFormat 、colorTable 、およびオプションのparent を使用して、カスタム 3D ボリュームを構築します。
textureData 、setTextureFormat()、およびcolorTableも参照してください 。
[override virtual noexcept] QCustom3DVolume::~QCustom3DVolume()
カスタム3Dボリュームを削除します。
QList<uchar> *QCustom3DVolume::createTextureData(const QList<QImage *> &images)
images の配列から新しいテクスチャデータ配列を作成し、それをこのボリュームオブジェクトのtextureData として設定します。テクスチャの寸法も、画像および配列の寸法に基づいて設定されます。 配列内のすべての画像は同じサイズでなければなりません。画像がすべてQImage::Format_Indexed8 形式でない場合、すべてのテクスチャデータはQImage::Format_ARGB32 形式に変換されます。画像がQImage::Format_Indexed8 形式の場合、ボリューム全体のcolorTable 値は最初の画像から取得されます。
新しく作成された配列へのポインタを返します。
textureData 、textureWidth 、textureHeight 、textureDepth 、およびsetTextureFormat()も参照してください 。
QImage QCustom3DVolume::renderSlice(Qt::Axis axis, int index)
index で指定されたスライスを、axis で指定された軸に沿って画像としてレンダリングします。このオブジェクトのテクスチャ形式が使用されます。
スライスのレンダリング済み画像を返します。無効なインデックスが指定された場合は、null 画像を返します。
setTextureFormat()も参照してください 。
void QCustom3DVolume::setSliceIndices(int x, int y, int z)
3つのスライスインデックス(x 、y 、z )を一度に設定するための便利な関数です。
textureDataも参照してください 。
void QCustom3DVolume::setSubTextureData(Qt::Axis axis, int index, const QImage &image)
ボリュームの指定されたaxis に沿って、3Dテクスチャの単一の2Dサブテクスチャを設定します。index パラメータは、設定するサブテクスチャを指定します。textureFormat がインデックス指定されている場合、ソースのimage はtextureFormat プロパティで指定された形式である必要があります。textureFormat がQImage::Format_ARGB32 の場合、画像はその形式に変換されます。画像のサイズは、指定された軸に沿ったボリュームテクスチャの断面サイズと一致している必要があります。画像の向きは、同じ軸に沿ってrenderSlice()メソッドによって生成されるスライス画像の向きと一致している必要があります。
注: y軸またはz軸を対象とする場合、データの各x 方向の行は 32ビットアラインメントされている必要があります。textureFormat がQImage::Format_Indexed8 であり、かつtextureWidth の値が4で割り切れない場合、適切にアラインメントを行うために、画像の各x方向の行にパディングバイトを追加する必要がある場合があります。 レンダリング上の不具合を防ぐため、パディングバイトには完全に透明な色を設定する必要があります。QImage がこれを自動的に行うことは保証されていません。
textureData およびrenderSlice()も参照してください 。
void QCustom3DVolume::setSubTextureData(Qt::Axis axis, int index, const uchar *data)
ボリュームの指定されたaxis に沿って、3Dテクスチャの単一の2Dサブテクスチャを設定します。index パラメータは、設定するサブテクスチャを指定します。 テクスチャdata は、textureFormat プロパティで指定された形式である必要があり、そのサイズは、指定された軸に沿ったボリュームテクスチャの断面積に、テクスチャ形式の色深度を乗じたバイト数でなければなりません。data は、同じ軸に沿ってrenderSlice()メソッドによって生成される画像内のデータと同様の順序で並んでいることが想定されます。
注: y軸またはz軸を対象とする場合、データの各x次元 行は 32ビット単位でアラインメントされる必要があります。textureFormat がQImage::Format_Indexed8 であり、textureWidth の値が4で割り切れない場合、適切にアラインメントするために、data の各x次元行にパディングバイトを追加する必要がある場合があります。 レンダリング上の不具合を防ぐため、パディングバイトには完全に透明な色を指定する必要があります。
textureData およびrenderSlice()も参照してください 。
void QCustom3DVolume::setTextureDimensions(int width, int height, int depth)
3つのテクスチャ次元(width 、height 、depth )を一度に設定するための便利な関数です。
textureDataも参照してください 。
void QCustom3DVolume::setTextureFormat(QImage::Format format)
textureData プロパティの形式をformat に設定します。現在サポートされている形式は、「QImage::Format_Indexed8 」と「QImage::Format_ARGB32 」の2つだけです。インデックス形式を指定する場合は、colorTable も設定する必要があります。デフォルトはQImage::Format_ARGB32 です。
textureFormat()、colorTable 、およびtextureDataも参照してください 。
int QCustom3DVolume::textureDataWidth() const
実際のテクスチャデータの幅を返します。テクスチャ形式がQImage::Format_Indexed8 の場合、この値はtextureWidth (32ビット境界にアラインされたもの)に等しくなります。それ以外の場合は、この値はtextureWidth の4倍に等しくなります。
QImage::Format QCustom3DVolume::textureFormat() const
textureData プロパティの値の形式を返します。
「setTextureFormat()」も参照してください 。
[signal] void QCustom3DVolume::textureFormatChanged(QImage::Format format)
このシグナルは、textureData の値であるformat が変更されたときに発せられます。
setTextureFormat()も参照してください 。
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.