QCustom3DVolume Class
QCustom3DVolume クラスは、グラフにボリュームレンダリングオブジェクトを追加します。詳細...
Header: | #include <QCustom3DVolume> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS DataVisualization) target_link_libraries(mytarget PRIVATE Qt6::DataVisualization) |
qmake: | QT += datavisualization |
Since: | QtDataVisualization 1.2 |
In QML: | Custom3DVolume |
Inherits: | 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() |
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(const QColor &color) |
void | setSliceFrameGaps(const QVector3D &values) |
void | setSliceFrameThicknesses(const QVector3D &values) |
void | setSliceFrameWidths(const 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(const QColor &color) |
void | sliceFrameGapsChanged(const QVector3D &values) |
void | sliceFrameThicknessesChanged(const QVector3D &values) |
void | sliceFrameWidthsChanged(const 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環境ではサポートされていません。
QAbstract3DGraph::addCustomItem()、QAbstract3DGraph::orthoProjection 、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(const QColor &color) |
通知シグナル:
void | sliceFrameColorChanged(const QColor &color) |
drawSliceFramesも参照 。
sliceFrameGaps : QVector3D
このプロパティは、各次元でボリューム本体とフレームの間に残されたエアギャップのサイズを保持します。
ギャップは異なる寸法で異なることがある。値は、同一寸法の体積厚さの分数である。値は負にできない。
デフォルトはQVector3D(0.01, 0.01, 0.01)
。
アクセス関数:
QVector3D | sliceFrameGaps() const |
void | setSliceFrameGaps(const QVector3D &values) |
通知シグナル:
void | sliceFrameGapsChanged(const QVector3D &values) |
drawSliceFramesも参照してください 。
sliceFrameThicknesses : QVector3D
このプロパティは、各次元のスライス枠の厚さを保持します。
値は、同じ次元のボリュームの厚さの分数です。値は負にすることはできません。
デフォルトはQVector3D(0.01, 0.01, 0.01)
。
アクセス関数:
QVector3D | sliceFrameThicknesses() const |
void | setSliceFrameThicknesses(const QVector3D &values) |
Notifier シグナル:
void | sliceFrameThicknessesChanged(const QVector3D &values) |
drawSliceFramesも参照 。
sliceFrameWidths : QVector3D
このプロパティはスライス枠の幅を保持します。
幅は異なる次元で異なることができるので、例えば、その次元の値をゼロに設定することで、ボリュームの特定の辺のフレームの描画を省略することができます。値は同じ次元のボリュームの厚さの分数です。値を負にすることはできません。
デフォルトはQVector3D(0.01, 0.01, 0.01)
。
アクセス関数:
QVector3D | sliceFrameWidths() const |
void | setSliceFrameWidths(const QVector3D &values) |
通知シグナル:
void | sliceFrameWidthsChanged(const 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(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)
与えられたposition,scaling,rotation,textureWidth,textureHeight,textureDepth,textureData,textureFormat,colorTable, およびオプションのparent でカスタム3Dボリュームを構築する。
textureData,setTextureFormat(),colorTableも参照してください 。
[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() も参照して ください。
©2024 The Qt Company Ltd. 本文書に含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。