/** * @ingroup VuoTransform * Start with an object pointing rightward (increasing X axis). * This function returns a unit vector representing the direction * a rightward-pointing object (+x axis) would be pointing after being transformed by @c transform. */ VuoPoint3d VuoTransform_getDirection(const VuoTransform transform) { // Make a new transform with only the rotational component. VuoTransform r; if (transform.type == VuoTransformTypeEuler) r = VuoTransform_makeEuler(VuoPoint3d_make(0,0,0), transform.rotationSource.euler, VuoPoint3d_make(1,1,1)); else r = VuoTransform_makeQuaternion(VuoPoint3d_make(0,0,0), transform.rotationSource.quaternion, VuoPoint3d_make(1,1,1)); float m[16]; VuoTransform_getMatrix(r, m); return VuoTransform_transformPoint(m, VuoPoint3d_make(1,0,0)); }
VuoOutputData(VuoTransform) transform, VuoOutputData(VuoPoint3d) palmVelocity, VuoOutputData(VuoPoint3d) wristPosition, VuoOutputData(VuoReal) sphereRadius, VuoOutputData(VuoPoint3d) sphereCenter, VuoOutputData(VuoReal) pinchAmount, VuoOutputData(VuoReal) grabAmount, VuoOutputData(VuoBoolean) isLeftHand, VuoOutputData(VuoReal) timeVisible, VuoOutputData(VuoReal) confidence, VuoOutputData(VuoList_VuoLeapPointable) fingers ) { *id = hand.id; VuoPoint3d scale = VuoPoint3d_make(hand.palmWidth, hand.palmWidth, hand.palmWidth); *transform = VuoTransform_makeQuaternion(hand.palmPosition, hand.rotation, scale); *palmVelocity = hand.palmVelocity; *wristPosition = hand.wristPosition; *sphereRadius = hand.sphereRadius; *sphereCenter = hand.sphereCenter; *pinchAmount = hand.pinchAmount; *grabAmount = hand.grabAmount; *isLeftHand = hand.isLeftHand; *timeVisible = hand.timeVisible; *confidence = hand.confidence; *fingers = hand.fingers ? hand.fingers : VuoListCreate_VuoLeapPointable(); }
#include "node.h" VuoModuleMetadata({ "title" : "Make Targeted Spotlight", "keywords" : [ "draw", "opengl", "scenegraph", "graphics", "directional", "lighting", "point", "source" ], "version" : "1.0.0", "node": { "exampleCompositions" : [ "AimFlashlight.vuo", "CompareLights.vuo" ] } }); void nodeEvent ( VuoInputData(VuoColor,{"default":{"r":1.,"g":1.,"b":1.,"a":1.}}) color, VuoInputData(VuoReal, {"default":1.0, "suggestedMin":0., "suggestedMax":1., "suggestedStep":0.1}) brightness, VuoInputData(VuoPoint3d, {"default":{"x":0.,"y":0.,"z":1.}, "suggestedStep":{"x":0.1,"y":0.1,"z":0.1}}) position, VuoInputData(VuoPoint3d, {"default":{"x":0.,"y":0.,"z":-1.}, "suggestedStep":{"x":0.1,"y":0.1,"z":0.1}}) target, VuoInputData(VuoReal, {"default":30., "suggestedMin":0., "suggestedMax":180., "suggestedStep":15.}) cone, VuoInputData(VuoReal, {"default":10., "suggestedMin":0., "suggestedStep":0.1}) range, VuoInputData(VuoReal, {"default":0.9, "suggestedMin":0., "suggestedMax":1., "suggestedStep":0.1}) sharpness, VuoOutputData(VuoSceneObject) object ) { VuoPoint4d quaternion = VuoTransform_quaternionFromVectors(VuoPoint3d_make(1,0,0), VuoPoint3d_subtract(target, position)); VuoTransform transform = VuoTransform_makeQuaternion(position, quaternion, VuoPoint3d_make(1,1,1)); *object = VuoSceneObject_makeSpotlight(color, brightness, transform, cone*M_PI/180., range, sharpness); }
/** * @ingroup VuoTransform * Decodes the JSON object @c js to create a new value. * * @eg{"identity"} * @eg{ * { * "quaternionRotation" = [0,0,0,1], * "translation" = [0,0,0], * "scale" = [1,1,1] * } * } * @eg{ * { * "eulerRotation" = [0,0,0], * "translation" = [0,0,0], * "scale" = [1,1,1] * } * } */ VuoTransform VuoTransform_valueFromJson(json_object *js) { VuoTransform t = VuoTransform_makeIdentity(); json_object *o = NULL; if (json_object_object_get_ex(js, "target", &o)) { VuoPoint3d target; target.x = json_object_get_double(json_object_array_get_idx(o,0)); target.y = json_object_get_double(json_object_array_get_idx(o,1)); target.z = json_object_get_double(json_object_array_get_idx(o,2)); VuoPoint3d position = VuoPoint3d_make(0,0,0); if (json_object_object_get_ex(js, "translation", &o)) { position.x = json_object_get_double(json_object_array_get_idx(o,0)); position.y = json_object_get_double(json_object_array_get_idx(o,1)); position.z = json_object_get_double(json_object_array_get_idx(o,2)); } VuoPoint3d upDirection = VuoPoint3d_make(0,1,0); if (json_object_object_get_ex(js, "upDirection", &o)) { upDirection.x = json_object_get_double(json_object_array_get_idx(o,0)); upDirection.y = json_object_get_double(json_object_array_get_idx(o,1)); upDirection.z = json_object_get_double(json_object_array_get_idx(o,2)); } return VuoTransform_makeFromTarget(position, target, upDirection); } if (json_object_object_get_ex(js, "quaternionRotation", &o)) { t.type = VuoTransformTypeQuaternion; VuoPoint4d q; q.x = json_object_get_double(json_object_array_get_idx(o,0)); q.y = json_object_get_double(json_object_array_get_idx(o,1)); q.z = json_object_get_double(json_object_array_get_idx(o,2)); q.w = json_object_get_double(json_object_array_get_idx(o,3)); t = VuoTransform_makeQuaternion(VuoPoint3d_make(0,0,0), q, VuoPoint3d_make(0,0,0)); } else if (json_object_object_get_ex(js, "eulerRotation", &o)) { t.type = VuoTransformTypeEuler; VuoPoint3d e; e.x = json_object_get_double(json_object_array_get_idx(o,0)); e.y = json_object_get_double(json_object_array_get_idx(o,1)); e.z = json_object_get_double(json_object_array_get_idx(o,2)); t = VuoTransform_makeEuler(VuoPoint3d_make(0,0,0), e, VuoPoint3d_make(0,0,0)); } if (json_object_object_get_ex(js, "translation", &o)) { t.translation.x = json_object_get_double(json_object_array_get_idx(o,0)); t.translation.y = json_object_get_double(json_object_array_get_idx(o,1)); t.translation.z = json_object_get_double(json_object_array_get_idx(o,2)); } if (json_object_object_get_ex(js, "scale", &o)) { t.scale.x = json_object_get_double(json_object_array_get_idx(o,0)); t.scale.y = json_object_get_double(json_object_array_get_idx(o,1)); t.scale.z = json_object_get_double(json_object_array_get_idx(o,2)); } return t; }
* @file * vuo.transform.make.quaternion node implementation. * * @copyright Copyright © 2012–2014 Kosada Incorporated. * This code may be modified and distributed under the terms of the MIT License. * For more information, see http://vuo.org/license. */ #include "node.h" VuoModuleMetadata({ "title" : "Make Quaternion Transform", "keywords" : [ "homogenous", "xyzw", "translation", "rotation", "scale", "shift", "move", "position", "angle", "axis", "size", "grow", "shrink" ], "version" : "1.0.0", "node": { "exampleCompositions" : [ ] } }); void nodeEvent ( VuoInputData(VuoPoint3d, {"default":{"x":0,"y":0,"z":0}}) translation, VuoInputData(VuoPoint4d, {"default":{"x":0,"y":0,"z":0,"w":1}}) rotation, VuoInputData(VuoPoint3d, {"default":{"x":1,"y":1,"z":1}}) scale, VuoOutputData(VuoTransform) transform ) { *transform = VuoTransform_makeQuaternion(translation, rotation, scale); }