From 2339a84443c07011acded1968a73b311b277101a Mon Sep 17 00:00:00 2001 From: Sergey Sharybin Date: Tue, 15 Dec 2015 13:51:09 +0500 Subject: Compositor: Expose track velocity via the Track Position node velocity is measured in pixels per frame. It is basically a coordinate difference of track coordinate at current frame and previous one (no future prediction happens). It's not really most intuitive place for such a things, but historically the node was called this way.. Track velocity could be used to face effects like motion blur bu piping it to the vector blur node. Reviewers: campbellbarton Reviewed By: campbellbarton Subscribers: hype, sebastian_k Differential Revision: https://developer.blender.org/D1591 --- .../compositor/nodes/COM_TrackPositionNode.cpp | 30 ++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) (limited to 'source/blender/compositor/nodes') diff --git a/source/blender/compositor/nodes/COM_TrackPositionNode.cpp b/source/blender/compositor/nodes/COM_TrackPositionNode.cpp index 75c8c786ae8..7f23798b768 100644 --- a/source/blender/compositor/nodes/COM_TrackPositionNode.cpp +++ b/source/blender/compositor/nodes/COM_TrackPositionNode.cpp @@ -44,6 +44,8 @@ void TrackPositionNode::convertToOperations(NodeConverter &converter, const Comp NodeOutput *outputX = this->getOutputSocket(0); NodeOutput *outputY = this->getOutputSocket(1); + NodeOutput *outputSpeedX = this->getOutputSocket(2); + NodeOutput *outputSpeedY = this->getOutputSocket(3); int frame_number; if (editorNode->custom1 == CMP_TRACKPOS_ABSOLUTE_FRAME) { @@ -62,7 +64,7 @@ void TrackPositionNode::convertToOperations(NodeConverter &converter, const Comp operationX->setPosition(editorNode->custom1); operationX->setRelativeFrame(editorNode->custom2); converter.addOperation(operationX); - + TrackPositionOperation *operationY = new TrackPositionOperation(); operationY->setMovieClip(clip); operationY->setTrackingObject(trackpos_data->tracking_object); @@ -72,7 +74,31 @@ void TrackPositionNode::convertToOperations(NodeConverter &converter, const Comp operationY->setPosition(editorNode->custom1); operationY->setRelativeFrame(editorNode->custom2); converter.addOperation(operationY); - + + TrackPositionOperation *operationSpeedX = new TrackPositionOperation(); + operationSpeedX->setMovieClip(clip); + operationSpeedX->setTrackingObject(trackpos_data->tracking_object); + operationSpeedX->setTrackName(trackpos_data->track_name); + operationSpeedX->setFramenumber(frame_number); + operationSpeedX->setAxis(0); + operationSpeedX->setPosition(editorNode->custom1); + operationSpeedX->setRelativeFrame(editorNode->custom2); + operationSpeedX->setSpeedOutput(true); + converter.addOperation(operationSpeedX); + + TrackPositionOperation *operationSpeedY = new TrackPositionOperation(); + operationSpeedY->setMovieClip(clip); + operationSpeedY->setTrackingObject(trackpos_data->tracking_object); + operationSpeedY->setTrackName(trackpos_data->track_name); + operationSpeedY->setFramenumber(frame_number); + operationSpeedY->setAxis(1); + operationSpeedY->setPosition(editorNode->custom1); + operationSpeedY->setRelativeFrame(editorNode->custom2); + operationSpeedY->setSpeedOutput(true); + converter.addOperation(operationSpeedY); + converter.mapOutputSocket(outputX, operationX->getOutputSocket()); converter.mapOutputSocket(outputY, operationY->getOutputSocket()); + converter.mapOutputSocket(outputSpeedX, operationSpeedX->getOutputSocket()); + converter.mapOutputSocket(outputSpeedY, operationSpeedY->getOutputSocket()); } -- cgit v1.2.3