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 C++ Classes for 3D に含まれます。
プロパティ
|
|
パブリック機能
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環境ではサポートされていません。
Q3DGraphsWidgetItem::addCustomItem() およびuseHighDefShaderも参照してください 。
プロパティ・ドキュメンテーション
alphaMultiplier : float
このプロパティは、ボリュームテクスチャの各テクセルのアルファ値がレンダリング時に乗算される値を保持します。
このプロパティは、ボリュームに均一な透明度を導入するために使用できます。preserveOpacity がtrue
の場合、少なくともある程度の透明度を持つテクセルのみが影響を受け、完全に不透明なテクセルは影響を受けません。値は負であってはいけません。デフォルトは1.0f
です。
アクセス関数:
float | alphaMultiplier() const |
void | setAlphaMultiplier(float mult) |
Notifier シグナル:
void | alphaMultiplierChanged(float mult) |
preserveOpacity およびtextureDataも参照 。
colorTable : QList<QRgb>
このプロパティは、インデックス付きテクスチャフォーマットの色を含む配列を保持します。
テクスチャフォーマットがインデックス化されていない場合、この配列は使用されず、空にすることができます。
デフォルトは0
です。
アクセス関数
QList<QRgb> | colorTable() const |
void | setColorTable(const QList<QRgb> &colors) |
Notifier シグナル:
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) |
Notifier シグナル:
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) |
Notifier シグナル:
void | sliceIndexXChanged(int value) |
textureData 、drawSlices 、drawSliceFramesも参照してください 。
sliceIndexY : int
このプロパティは、どの水平スライスを表示するかを示すテクスチャデータへのy次元インデックスを保持する。
いずれかの次元を負に設定すると、その次元のスライスまたはスライスフレームが描画されないことを示します。すべての次元が負の場合、スライスまたはスライスフレームは描画されず、ボリュームは正常に描画されます。
デフォルトは-1
。
アクセス関数:
int | sliceIndexY() const |
void | setSliceIndexY(int value) |
Notifier シグナル:
void | sliceIndexYChanged(int value) |
textureData 、drawSlices 、drawSliceFramesも参照してください 。
sliceIndexZ : int
このプロパティは、どの垂直スライスを表示するかを示すテクスチャデータへのz次元インデックスを保持する。
いずれかの次元を負に設定すると、その次元のスライスまたはスライスフレームが描画されないことを示します。すべての次元が負の場合、スライスまたはスライスフレームは描画されず、ボリュームは正常に描画されます。
デフォルトは-1
。
アクセス関数:
int | sliceIndexZ() const |
void | setSliceIndexZ(int value) |
Notifier シグナル:
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) |
Notifier シグナル:
void | textureDepthChanged(int value) |
textureData 、textureWidth 、textureHeight 、setTextureFormat ()も参照 。
textureHeight : int
このプロパティは、ボリューム内容を定義する 3D テクスチャの高さをピクセル単位で保持します。
デフォルトは0
です。
注意: この値が変更された場合、textureData 値のサイズ変更または再作成が必要になる場合があります。デフォルトは0
です。
アクセス関数:
int | textureHeight() const |
void | setTextureHeight(int value) |
Notifier シグナル:
void | textureHeightChanged(int value) |
textureData 、textureWidth 、textureDepth 、setTextureFormat ()も参照 。
textureWidth : int
このプロパティは、ボリュームの内容を定義する3Dテクスチャの幅をピクセル単位で保持します。
デフォルトは0
です。
注意: この値が変更された場合、textureData 値のサイズ変更または再作成が必要になる場合があります。デフォルトは0
です。
アクセス関数:
int | textureWidth() const |
void | setTextureWidth(int value) |
Notifier シグナル:
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)
axis で指定された軸に沿って、index で指定されたスライスを画像にレンダリングする。このオブジェクトのテクスチャフォーマットが使用されます。
スライスのレンダリング画像、または無効なインデックスが指定された場合は 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 の場合、この値は 32 ビット境界にアライメントされたtextureWidth に等しくなります。そうでない場合、この値はtextureWidth の 4 倍に等しくなります。
QImage::Format QCustom3DVolume::textureFormat() const
textureData プロパティ値のフォーマットを返す。
setTextureFormat()も参照 。
[signal]
void QCustom3DVolume::textureFormatChanged(QImage::Format format)
このシグナルは、textureData のformat が変化したときに発せられる。
setTextureFormat()も参照のこと 。
© 2025 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.