[PD] Free rotation in GEM

PSPunch shima at pspunch.com
Thu Jul 17 03:21:36 CEST 2008


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 at iem.at mailing list
>>> UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list
>> _______________________________________________
>> Pd-list at iem.at mailing list
>> UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list

More information about the Pd-list mailing list