That was a lot of shorthand on my part. For instance, lets say you're using some sort of 'target' object for the up-axis. And let's say the aim-axis of the joint is y, and the up-axis is x. Pretend your joint is at position [0,3,0] and the 'target' object is at [1,4,1], so the aim vector is [1,1,1]. If your target is perfectly on-plane with your joint, ie it lies on the x-z plane of your joint, then you don't need any work; but usually, a target object might be 'offset' from this plane, as is the case here. You need to remove the 'y' part of this vector so that you don't wobble the joint - so the aim vector becomes [1,0,1].
aimVec = OM.MVector(1,0,1) basisVec = OM.MVector(1,0,0) #since the aim-axis is x quat = basisVec.rotateTo(aimVec) twistMatrix = quat.asMatrix() newJointMatrix = aimMatrix * twistMatrix There are other things you'll need to take into account - rotation orders, parent matrices, inverse scale compensation, etc, to get the final euler rotation values of each joint. Hopefully this gets you pointed in the right direction. Good luck! On Mon, Nov 12, 2012 at 7:51 AM, Roy Nieterau <royniete...@gmail.com> wrote: > Hey John, > > Thanks for the quick replies. I'm not sure what you mean with the > following: > > * > * > *Zero out whichever axis is the aim-axis in your 'up vector', then > convert that vector into an MMatrix. Now you have a matrix you can > multiply your existing aimed-joint-matrix by to twist it.* > > Why would that be helpful or what would those steps produce? If I zero out > the up vector and convert that into an MMatrix ain't I creating a zero > matrix? (Default matrix) > > -Roy > > > > On Monday, November 12, 2012 4:34:14 PM UTC+1, JP wrote: > >> I would think about it like this: for each point/joint along the curve, >> you should have some sort of 'up vector'. You could get that a number of >> ways - a start/end 'twist' amount, an array of 'up' target objects for each >> joint, etc. The end result is that each point along the curve should have >> a vector to some other target to help determine the twist. >> >> Next, you'll need to know what your joint's aim-axis is. The built-in >> spline ik node assumes an 'x' aim axis (which blows), but you could have an >> input attr for the aim axis. >> >> Zero out whichever axis is the aim-axis in your 'up vector', then convert >> that vector into an MMatrix. Now you have a matrix you can multiply your >> existing aimed-joint-matrix by to twist it. >> >> I think it would be nice to have an array of world matrices for >> up-objects, which you would plug the controls for the spline into. You >> could get the closest point along the curve for each and treat a particular >> axis as the 'up vector' for that point along the curve, then interpolate >> between them. >> >> >> On Mon, Nov 12, 2012 at 7:13 AM, Roy Nieterau <roy_ni...@hotmail.com>wrote: >> >>> Hey JP, >>> >>> Actually I know how to get the point on the curve. Aiming at the next >>> joint is also a relatively easy step. >>> >>> On the other hand knowing/calculating the up vector for the aim is >>> something I'm unaware of how to do it. How did you solve/calculate the up >>> vector for the aim constraint? >>> >>> I'm especially interested in allowing a twisting motion along the curve. >>> >>> -Roy >>> >>> ------------------------------ >>> CC: python_in...@**googlegroups.com >>> From: jspa...@gmail.com >>> >>> Subject: Re: [Maya-Python] API: Custom Spline IK (or Motion Path) >>> Date: Mon, 12 Nov 2012 07:08:48 -0800 >>> To: python_in...@**googlegroups.com >>> >>> >>> Hey Roy, >>> >>> I've done a sort of 'manual' setup like this by writing a >>> 'pointAtArclen' node and then wiring the rest with existing nodes. In my >>> case I used aim constraints for each joint, but you can do something >>> similar within your solver- get the orientation by figuring out where each >>> joint needs to be on the curve and what the vector would be if you were >>> aiming each joint at the next. >>> >>> -JP >>> >>> Sent from my iPhone >>> >>> On Nov 12, 2012, at 2:00 AM, Roy Nieterau <royni...@gmail.com> wrote: >>> >>> Hey Guys, >>> >>> I'm looking into creating a custom Stretchy Spline IK setup that doesn't >>> pop (over & under extends in extreme situations). >>> But I seem to be unable to wrap my head around how to calculate >>> orientations on points on the curve. >>> Since the points on the curve don't have any orientation (well, they do >>> have tangents or something like that?) I have no clue on how to actually >>> start with this. >>> >>> My main references of tools in Maya would be the Motion Path and the >>> Spline IK (with Advanced Twist controlled by a start and end object). >>> If anybody has any starting points for this it would be greatly >>> appreciated! >>> >>> Thanks in advance. >>> >>> Regards, >>> Roy >>> >>> -- >>> view archives: >>> http://groups.google.com/**group/python_inside_maya<http://groups.google.com/group/python_inside_maya> >>> change your subscription settings: http://groups.google.com/** >>> group/python_inside_maya/**subscribe<http://groups.google.com/group/python_inside_maya/subscribe> >>> >>> >>> -- >>> view archives: >>> http://groups.google.com/**group/python_inside_maya<http://groups.google.com/group/python_inside_maya> >>> change your subscription settings: http://groups.google.com/** >>> group/python_inside_maya/**subscribe<http://groups.google.com/group/python_inside_maya/subscribe> >>> >>> -- >>> view archives: >>> http://groups.google.com/**group/python_inside_maya<http://groups.google.com/group/python_inside_maya> >>> change your subscription settings: http://groups.google.com/** >>> group/python_inside_maya/**subscribe<http://groups.google.com/group/python_inside_maya/subscribe> >>> >> >> >> >> -- >> John Patrick >> 404-242-2675 >> jspa...@gmail.com >> http://www.canyourigit.com >> > -- > view archives: http://groups.google.com/group/python_inside_maya > change your subscription settings: > http://groups.google.com/group/python_inside_maya/subscribe > -- John Patrick 404-242-2675 jspatr...@gmail.com http://www.canyourigit.com -- view archives: http://groups.google.com/group/python_inside_maya change your subscription settings: http://groups.google.com/group/python_inside_maya/subscribe