このページでは

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(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.