From 73eca41f61475efe49e9e21e5a9e162346368eed Mon Sep 17 00:00:00 2001 From: Constantine Tarasenkov Date: Sat, 11 Oct 2014 23:25:03 +0400 Subject: [PATCH 1/3] Updating axis on matrix change --- libs/openFrameworks/3d/ofNode.cpp | 15 ++++++++++++--- libs/openFrameworks/3d/ofNode.h | 2 ++ 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/libs/openFrameworks/3d/ofNode.cpp b/libs/openFrameworks/3d/ofNode.cpp index 9b788c24fa4..d8a517d440a 100644 --- a/libs/openFrameworks/3d/ofNode.cpp +++ b/libs/openFrameworks/3d/ofNode.cpp @@ -44,6 +44,7 @@ void ofNode::setTransformMatrix(const ofMatrix4x4 &m44) { ofQuaternion so; localTransformMatrix.decompose(position, orientation, scale, so); + updateAxis(); onPositionChanged(); onOrientationChanged(); @@ -59,6 +60,7 @@ void ofNode::setPosition(float px, float py, float pz) { void ofNode::setPosition(const ofVec3f& p) { position = p; localTransformMatrix.setTranslation(position); + updateAxis(); onPositionChanged(); } @@ -100,6 +102,7 @@ float ofNode::getZ() const { void ofNode::setOrientation(const ofQuaternion& q) { orientation = q; createMatrix(); + updateAxis(); onOrientationChanged(); } @@ -143,6 +146,7 @@ void ofNode::setScale(float sx, float sy, float sz) { void ofNode::setScale(const ofVec3f& s) { this->scale = s; createMatrix(); + updateAxis(); onScaleChanged(); } @@ -250,6 +254,13 @@ void ofNode::lookAt(const ofNode& lookAtNode, const ofVec3f& upVector) { lookAt(lookAtNode.getGlobalPosition(), upVector); } +//---------------------------------------- +void ofNode::updateAxis() { + if(scale[0]>0) axis[0] = getLocalTransformMatrix().getRowAsVec3f(0)/scale[0]; + if(scale[1]>0) axis[1] = getLocalTransformMatrix().getRowAsVec3f(1)/scale[1]; + if(scale[2]>0) axis[2] = getLocalTransformMatrix().getRowAsVec3f(2)/scale[2]; +} + //---------------------------------------- ofVec3f ofNode::getXAxis() const { return axis[0]; @@ -380,9 +391,7 @@ void ofNode::createMatrix() { localTransformMatrix.rotate(orientation); localTransformMatrix.setTranslation(position); - if(scale[0]>0) axis[0] = getLocalTransformMatrix().getRowAsVec3f(0)/scale[0]; - if(scale[1]>0) axis[1] = getLocalTransformMatrix().getRowAsVec3f(1)/scale[1]; - if(scale[2]>0) axis[2] = getLocalTransformMatrix().getRowAsVec3f(2)/scale[2]; + updateAxis(); } diff --git a/libs/openFrameworks/3d/ofNode.h b/libs/openFrameworks/3d/ofNode.h index 8bdba1a593b..3ee2c6a2105 100644 --- a/libs/openFrameworks/3d/ofNode.h +++ b/libs/openFrameworks/3d/ofNode.h @@ -157,6 +157,8 @@ class ofNode { virtual void onScaleChanged() {} private: + void updateAxis() {} + ofVec3f position; ofQuaternion orientation; ofVec3f scale; From 332892d6576faa0435cf58908765d32eff2ef886 Mon Sep 17 00:00:00 2001 From: Constantine Tarasenkov Date: Sun, 12 Oct 2014 00:00:43 +0400 Subject: [PATCH 2/3] Making updateAxis protected member --- libs/openFrameworks/3d/ofNode.h | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/libs/openFrameworks/3d/ofNode.h b/libs/openFrameworks/3d/ofNode.h index 3ee2c6a2105..980a3cdd2ee 100644 --- a/libs/openFrameworks/3d/ofNode.h +++ b/libs/openFrameworks/3d/ofNode.h @@ -149,7 +149,7 @@ class ofNode { ofNode *parent; void createMatrix(); - + void updateAxis(); // classes extending ofNode can override these methods to get notified virtual void onPositionChanged() {} @@ -157,8 +157,6 @@ class ofNode { virtual void onScaleChanged() {} private: - void updateAxis() {} - ofVec3f position; ofQuaternion orientation; ofVec3f scale; From f75e575cd7dd34731861d08cdc5e0bc8ae97d09c Mon Sep 17 00:00:00 2001 From: Constantine Tarasenkov Date: Sun, 12 Oct 2014 00:01:24 +0400 Subject: [PATCH 3/3] Removing extra updateAxis() calls --- libs/openFrameworks/3d/ofNode.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/libs/openFrameworks/3d/ofNode.cpp b/libs/openFrameworks/3d/ofNode.cpp index d8a517d440a..674c55c9cef 100644 --- a/libs/openFrameworks/3d/ofNode.cpp +++ b/libs/openFrameworks/3d/ofNode.cpp @@ -102,7 +102,6 @@ float ofNode::getZ() const { void ofNode::setOrientation(const ofQuaternion& q) { orientation = q; createMatrix(); - updateAxis(); onOrientationChanged(); } @@ -146,7 +145,6 @@ void ofNode::setScale(float sx, float sy, float sz) { void ofNode::setScale(const ofVec3f& s) { this->scale = s; createMatrix(); - updateAxis(); onScaleChanged(); }