diff options
author | Miikka Heikkinen <miikka.heikkinen@digia.com> | 2014-08-28 15:42:52 +0300 |
---|---|---|
committer | Miikka Heikkinen <miikka.heikkinen@digia.com> | 2014-09-01 11:05:13 +0300 |
commit | a20806dac74415f3d8cb6679c9eae86ce074ddae (patch) | |
tree | 49bffc538f0dac3feb99e23787b7e945a4a554d4 /src/datavisualization/engine/abstract3drenderer.cpp | |
parent | cd1a66a8fcdcc6870656a924bf55ffbcd6ea1162 (diff) |
Pixel perfect volume shader
Now the volume should render with pixel perfect accuracy.
The drawback is that it is significantly slower than the old
approximate solution.
Change-Id: I4df7e9a28a27b56150c71a85a4c1fb69a215dabc
Reviewed-by: Tomi Korpipää <tomi.korpipaa@digia.com>
Diffstat (limited to 'src/datavisualization/engine/abstract3drenderer.cpp')
-rw-r--r-- | src/datavisualization/engine/abstract3drenderer.cpp | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/src/datavisualization/engine/abstract3drenderer.cpp b/src/datavisualization/engine/abstract3drenderer.cpp index 090a833a..78f4b600 100644 --- a/src/datavisualization/engine/abstract3drenderer.cpp +++ b/src/datavisualization/engine/abstract3drenderer.cpp @@ -1320,15 +1320,15 @@ void Abstract3DRenderer::drawCustomItems(RenderingState state, } else { // Precalculate texture dimensions so we can optimize // ray stepping to hit every texture layer. - QVector3D textureDimensions(float(item->textureWidth()), - float(item->textureHeight()), - float(item->textureDepth())); + QVector3D textureDimensions(1.0f / float(item->textureWidth()), + 1.0f / float(item->textureHeight()), + 1.0f / float(item->textureDepth())); shader->setUniformValue(shader->textureDimensions(), textureDimensions); - int sampleCount = qMax(item->textureWidth(), item->textureHeight()); - sampleCount = qMax(sampleCount, item->textureDepth()); + // Worst case scenario sample count + int sampleCount = item->textureWidth() + item->textureHeight() + + item->textureDepth(); shader->setUniformValue(shader->sampleCount(), sampleCount); - } m_drawer->drawObject(shader, item->mesh(), 0, 0, item->texture()); } else |