summaryrefslogtreecommitdiffstats
path: root/src/render/materialsystem/shaderdata.cpp
diff options
context:
space:
mode:
authorKevin Ottens <kevin.ottens@kdab.com>2016-07-01 08:52:32 +0200
committerSean Harmer <sean.harmer@kdab.com>2016-07-02 08:41:14 +0000
commite237c8799644e3eb6f257eb5283b0c7525cec3df (patch)
tree2e95f7b1cb454f79e7062eb458b41a994f558719 /src/render/materialsystem/shaderdata.cpp
parent1e0fb6c74d81a5b6c17a7f127566e4fb8ed2f28b (diff)
Add a new transform mode for ShaderData properties
Sometimes you just want to transform the direction of the vector and not translate it. So add a specific ModelToWorldDirection mode going through a QVector4D to do this properly. Change-Id: I7292aff6abf2aa3a154a5bec90b6d7da6ea0d595 Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
Diffstat (limited to 'src/render/materialsystem/shaderdata.cpp')
-rw-r--r--src/render/materialsystem/shaderdata.cpp5
1 files changed, 5 insertions, 0 deletions
diff --git a/src/render/materialsystem/shaderdata.cpp b/src/render/materialsystem/shaderdata.cpp
index 01eceb696..6de0047a3 100644
--- a/src/render/materialsystem/shaderdata.cpp
+++ b/src/render/materialsystem/shaderdata.cpp
@@ -251,6 +251,11 @@ bool ShaderData::updateWorldTransform(const QMatrix4x4 &worldMatrix)
if (transformedIt.value() == ModelToEye) {
m_updatedProperties.insert(transformedIt.key(), m_viewMatrix * m_worldMatrix * m_originalProperties.value(transformedIt.key()).value<QVector3D>());
m_properties.insert(transformedIt.key(), m_viewMatrix * m_worldMatrix * m_originalProperties.value(transformedIt.key()).value<QVector3D>());
+ } else if (transformedIt.value() == ModelToWorldDirection) {
+ auto localDirection = QVector4D(m_originalProperties.value(transformedIt.key()).value<QVector3D>(), 0.0f);
+ auto worldDirection = (m_worldMatrix * localDirection).toVector3D();
+ m_updatedProperties.insert(transformedIt.key(), worldDirection);
+ m_properties.insert(transformedIt.key(), worldDirection);
} else {
m_updatedProperties.insert(transformedIt.key(), m_worldMatrix * m_originalProperties.value(transformedIt.key()).value<QVector3D>());
m_properties.insert(transformedIt.key(), m_worldMatrix * m_originalProperties.value(transformedIt.key()).value<QVector3D>());