ok. i think i undersand. there is an other possibility based on the gemlist_info object that get curent transformation matrix and convert it to rotation / translation ...
so, what i think is the most simple is : gemhead | rotateXYZ (for the drag rotation, should be (0 0 0) when you don't drag) | rotateXYZ (for a feedback loop thanks to the rotation given by by the last object on the chain) | object primitive | gemlist (the gemlist should be banged only at the end of the drag) | gemlist_info (get curent rotation at the end of the drag, and send it to the 2nd rotate) you can save few cpu using gemlist_matrix and GEMglMultMatrix. this is a bit like the algorythm you describ, execpt that everything is computed on the GPU (it is more the Gem way to do). cyrille PSPunch a écrit : > Hi, > > > My primary goal is to place an object you can rotate by dragging the mouse. > > > Basically, whenever the mouse is clicked to start drag, I want to rotate > the object on the X & Y axises. Up to this point is no problem, but I > want the rotation to begin assuming the direction of the viewer being > the bases of the axis. > > Using one [rotate] object, I can get the object to rotate in the > behavior I expect only on the first drag. > > Ideally, each time the mouse button is released, the base (fundus? > basal?) of the rotation vector should be updated... I think. > > By chaining [rotate] objects, I can use one to rotate the rotation axis > and another to rotate the object from that point. > However, I have not found a method of summing multiple drag actions. > > > Although I may be wrong, I think what I need to do is, > > > 1. Prepare two rotation axises > I. Angle of the axis > II.Angle of the current drag session > > 2. When the mouse button is clicked, rotate object to > angles I + II > > 3. When the mouse button is released, sum I + II and wait for > a new click. > > > And again, although I may be wrong, my current understanding is that > step 3 will require multiplying the X-Y-Z angles converted to > quaternion, or some other method which will rotate the Z axis at some > point by summing rotations based only on the X&Y axises. > > > Using procedures completely different from the one mentioned abouve, I > was able to achieve the expected behavior based on [accumrotate] but I > found no simple way of managing the current angle. > > Unfortunately I have torn down the patch. If it would clarify anything, > I will try to put together another one later today. > > > Thanks for replies. > -- > David Shimamoto > > >> Indeed, >> >> Seems to me all the matrix discussion does not get to the heart of the >> question. >> >> So, Pspunch, what are you really trying to do? >> >> I agree with cyrille that It's very likely the normal rotation objects >> will do what you want it to. >> >> If you are just wanting to rotate many times, using huge numbers then >> tricks like: wrap 0 359 work well... >> >> ..b >> >> cyrille henry wrote: >>> hello >>> >>> sorry if i misunderstand. >>> rotateXYZ will rotate in X direction, then in Y, finally in Z. >>> if you wish to rotate in Z, then in X, you just need 2 rotate objects: >>> the 1st for the rotation in Z, then an other for the rotation in X. >>> >>> anyway, there is no matrix manipulation that i was not able to do with >>> rotate/rotateXYZ/translateXYZ/scaleXYZ/shearXY.. >>> so i'm quite sure you don't need anything else than this standard objects >>> for simple matrix rotation. >>> >>> so i think you need 1 [rotate] to rotate the vector axis of the object, >>> then a accumrotate. >>> if i misunderstood, could you please describe your problem better. >>> >>> I think you can also use GEMgl objects to multiply the matrix with a custom >>> one, but it's to much complex for what you need. >>> >>> cyrille >>> >>> >>> >>> PSPunch a écrit : >>>> Hi Mathieu, >>>> >>>> >>>> I have not looked into GridFlow much, but I had the impression that its >>>> main concept was to add matrix manipulation features to Pd, all of its >>>> visual capabilities being just one of the many results of data you can >>>> manipulate with matrix. (or is the egg first?) >>>> >>>> >>>> Anyway, understanding its marvelous potentials, I have lately been stuck >>>> with Windows platforms. At least I got your point that utilizing >>>> GridFlow only for crunching numbers may work but not so efficient. >>>> >>>> >>>> >>>> What I am trying to do is rotate the vector axis of the object before >>>> applying [rotation]. This also calls for a method of summing the >>>> rotations when applying multiple times (and my current understanding is >>>> that this can only be done by multiplying the quaternion on each rotation) >>>> >>>> If there is no solution at the moment, perhaps Gem could use a few extra >>>> objects to ease advanced rotations? >>>> >>>> I feel like I am complaining about lack of features without pointing out >>>> what exactly is missing, when I should be blaming my lack of math skills. >>>> >>>> hmmm.. >>>> >>>> -- >>>> David Shimamoto >>>> >>>> >>>> >>>>> On Wed, 16 Jul 2008, PSPunch wrote: >>>>> >>>>>> Trying to achieve free rotation *without* using [accumrotate], I have >>>>>> come across concepts such as multiplying matrixs and converting a matrix >>>>>> to "quarternion" >>>>>> How do you implement precise control of rotation matrixs? >>>>>> Is this exactly what people use GridFlow for? >>>>> If you tried GridFlow's bundled examples you'd see what I use GridFlow >>>>> for. I suppose that I could add some other people's examples in the >>>>> package, if they sent it to me for that purpose. There is already one >>>>> patch by Roman Häfeli in GridFlow's examples though. >>>>> >>>>> GridFlow does not support quaternions. I bet it's possible to add >>>>> support for it using abstractions, but it wouldn't be fast. But I'm >>>>> willing to add it to the core... there's already a complex-number >>>>> section in number.c, why not quaternion product? It would be called [# >>>>> H.*] where H stands for Hamilton (in math the letter Q is already >>>>> reserved for rationals, so I'd use H even though the concept of rational >>>>> reasonably couldn't appear in that particular place). >>>>> >>>>> _ _ __ ___ _____ ________ _____________ _____________________ ... >>>>> | Mathieu Bouchard - tél:+1.514.383.3801, Montréal, Québec >>>> _______________________________________________ >>>> Pd-list@iem.at mailing list >>>> UNSUBSCRIBE and account-management -> >>>> http://lists.puredata.info/listinfo/pd-list >>>> >>>> >>> _______________________________________________ >>> Pd-list@iem.at mailing list >>> UNSUBSCRIBE and account-management -> >>> http://lists.puredata.info/listinfo/pd-list >>> >> > > > _______________________________________________ > Pd-list@iem.at mailing list > UNSUBSCRIBE and account-management -> > http://lists.puredata.info/listinfo/pd-list > > _______________________________________________ Pd-list@iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list