From 5a51d06ec8f0210f51e65abfde9f868ab7bfa8ef Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Mon, 25 Aug 2014 13:16:04 +0300 Subject: Add alpha multiplier to QCustom3DVolume api MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: I856c4166513f6d6f7b73fd52bc46d52ab1b8fdff Reviewed-by: Tomi Korpipää Reviewed-by: Mika Salmela --- .../datavisualization/volumetric/volumetric.cpp | 44 +++++++++++++++++++--- 1 file changed, 39 insertions(+), 5 deletions(-) (limited to 'examples/datavisualization/volumetric/volumetric.cpp') 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 *textureData) { -- cgit v1.2.3