diff options
author | Miikka Heikkinen <miikka.heikkinen@digia.com> | 2014-08-25 13:16:04 +0300 |
---|---|---|
committer | Miikka Heikkinen <miikka.heikkinen@digia.com> | 2014-08-25 15:01:10 +0300 |
commit | 5a51d06ec8f0210f51e65abfde9f868ab7bfa8ef (patch) | |
tree | 2319880f2d66e5610d9d1040d886f52cada82ad8 /examples/datavisualization/volumetric/volumetric.cpp | |
parent | f9bb71fd11cce59d74e78202a1117c8abb3a2e44 (diff) |
Add alpha multiplier to QCustom3DVolume api
Change-Id: I856c4166513f6d6f7b73fd52bc46d52ab1b8fdff
Reviewed-by: Tomi Korpipää <tomi.korpipaa@digia.com>
Reviewed-by: Mika Salmela <mika.salmela@digia.com>
Diffstat (limited to 'examples/datavisualization/volumetric/volumetric.cpp')
-rw-r--r-- | examples/datavisualization/volumetric/volumetric.cpp | 44 |
1 files changed, 39 insertions, 5 deletions
diff --git a/examples/datavisualization/volumetric/volumetric.cpp b/examples/datavisualization/volumetric/volumetric.cpp index a553ccf8..56f02dcb 100644 --- a/examples/datavisualization/volumetric/volumetric.cpp +++ b/examples/datavisualization/volumetric/volumetric.cpp @@ -80,7 +80,7 @@ VolumetricModifier::VolumetricModifier(Q3DScatter *scatter) // Both tables have a fully transparent colors to fill outer portions of the volume. // The primary color table. - // The first visible layer, red, is somewhat transparent. Rest of to colors are opaque. + // The top two layers are transparent. m_colorTable1.resize(colorTableSize); m_colorTable2.resize(colorTableSize); @@ -88,9 +88,9 @@ VolumetricModifier::VolumetricModifier(Q3DScatter *scatter) if (i < cutOffColorIndex) m_colorTable1[i] = qRgba(0, 0, 0, 0); else if (i < 60) - m_colorTable1[i] = qRgba((i * 2) + 120, 0, 0, 20); + m_colorTable1[i] = qRgba((i * 2) + 120, 0, 0, 15); else if (i < 120) - m_colorTable1[i] = qRgba(0, ((i - 60) * 2) + 120, 0, 255); + m_colorTable1[i] = qRgba(0, ((i - 60) * 2) + 120, 0, 50); else if (i < 180) m_colorTable1[i] = qRgba(0, 0, ((i - 120) * 2) + 120, 255); else @@ -98,14 +98,15 @@ VolumetricModifier::VolumetricModifier(Q3DScatter *scatter) } // The alternate color table. - // The first visible layer is a thin single color, and rest of the volume uses a smooth gradient. + // The first visible layer is a thin opaque color, and rest of the volume uses a smooth + // transparent gradient. for (int i = 1; i < colorTableSize; i++) { if (i < cutOffColorIndex) m_colorTable2[i] = qRgba(0, 0, 0, 0); else if (i < cutOffColorIndex + 4) m_colorTable2[i] = qRgba(75, 150, 0, 255); else - m_colorTable2[i] = qRgba(i, 0, 255 - i, 255); + m_colorTable2[i] = qRgba(i, 0, 255 - i, i); } m_volumeItem->setColorTable(m_colorTable1); @@ -167,6 +168,11 @@ void VolumetricModifier::setSliceLabels(QLabel *xLabel, QLabel *yLabel, QLabel * adjustSliceZ(m_sliceSliderZ->value()); } +void VolumetricModifier::setAlphaMultiplierLabel(QLabel *label) +{ + m_alphaMultiplierLabel = label; +} + void VolumetricModifier::sliceX(int enabled) { if (m_volumeItem) @@ -322,6 +328,34 @@ void VolumetricModifier::changeColorTable(int enabled) adjustSliceZ(m_sliceSliderZ->value()); } +void VolumetricModifier::setPreserveOpacity(bool enabled) +{ + m_volumeItem->setPreserveOpacity(enabled); + + // Rerender image labels + adjustSliceX(m_sliceSliderX->value()); + adjustSliceY(m_sliceSliderY->value()); + adjustSliceZ(m_sliceSliderZ->value()); +} + +void VolumetricModifier::adjustAlphaMultiplier(int value) +{ + float mult; + if (value > 100) + mult = float(value - 99) / 2.0f; + else + mult = float(value) / float(500 - value * 4); + m_volumeItem->setAlphaMultiplier(mult); + QString labelFormat = QStringLiteral("Alpha multiplier: %1"); + m_alphaMultiplierLabel->setText(labelFormat.arg( + QString::number(m_volumeItem->alphaMultiplier(), 'f', 3))); + + // Rerender image labels + adjustSliceX(m_sliceSliderX->value()); + adjustSliceY(m_sliceSliderY->value()); + adjustSliceZ(m_sliceSliderZ->value()); +} + int VolumetricModifier::createVolume(int textureSize, int startIndex, int count, QVector<uchar> *textureData) { |