diff options
author | Kevin Ottens <kevin.ottens@kdab.com> | 2016-07-01 08:52:32 +0200 |
---|---|---|
committer | Sean Harmer <sean.harmer@kdab.com> | 2016-07-02 08:41:14 +0000 |
commit | e237c8799644e3eb6f257eb5283b0c7525cec3df (patch) | |
tree | 2e95f7b1cb454f79e7062eb458b41a994f558719 /src/render/materialsystem/shaderdata.cpp | |
parent | 1e0fb6c74d81a5b6c17a7f127566e4fb8ed2f28b (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.cpp | 5 |
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>()); |