PDA

View Full Version : How to connect objects



Stef
05-03-2002, 10:06 PM
Hi all,
what is the best approach to "connect" objects??
Example:

PushMatrix
translated1..
rotated1...
Block1
Popmatrix

Pushmatrix
translated2..
rotated2...
Block2
Popmatrix

Now i got two Blocks that i can move independently in the space by changing values of translated and rotated....
Is that a good way??

How can i now connect them both that they atre both in one Coordinatesystem and behave like one objekt when rotating /translating??

Thanks in advance!

mikael_aronsson
05-04-2002, 12:25 AM
Hi !

Just put another push/pop around it:

push
transform
draw something here
push
transform
draw part of object
pop
push
transform
draw another part of object
pop
pop

Now you can transform each part of the object, and also the whole object any way you want.

Mikael

Stef
05-04-2002, 12:46 AM
Thanks Mikael.
One more question:
Is that the best way since there is a limit for the Matrix Stack concerning Push and Pop(32)?
How can i make one Object being moved
by translation and rotation when it is selected and the others not without defining every object with its own PushMatrix and Popmatrix??
Like this:
Pushmatrix()
obj1
obj2
obj3
.
.
.
Popmatrix

Now i have selected Obj3
What to do to rotate just Obj3 now??

Bob
05-04-2002, 01:24 AM
For each object you want to transform without affecting other objects, draw the object inside yet anoter glPush/PopMatirx pair, and make the object specific transformation inside that pair.

Bob
05-04-2002, 01:30 AM
Sorry, didn't see you wanted to do it without push/pop. Well, is there a reason you DON'T want to use them?

You can of course keep on transforming each object, without pushing them, and when you want to go back one step in the transformation (i.e. pop the stack), you can load the identity matrix, and redo all matrix operations but the last one.

Yes, there is a limit on the modelview stack. The depth is implementation depdenent, but you are guaranteed to have at least 32 matrices deep stack. That means you can call glPushMatrix at least 32 times, with out popping the stack. That that should be more than enough for any not too advanced application.

nexusone
05-04-2002, 04:48 AM
I don't think the limit of 32 is a problem, since you would have to push 32 times in a row and not pop to go over the 32.
If you push then pop each object you are still back at zero.


example

glPushMartix() // Push matrix by 1
draw_object1()
glPopMatrix() // Pop matrix subtract matrix by 1

glPushMartix() // Push matrix by 1
draw_object2()
glPopMatrix() // Pop matrix subtract matrix by 1

If you do the math your matrix is back at zero.

A little more advanced:

glPushMartix() // Push matrix by 1
glTranslate(.....) Move robot
glRotate(....) Rotate robot
draw_robot_body()
glPushMartix() // Push matrix by 1
glRotate() // move robot arm
draw_robot_arm()
glPopMatrix() // Pop matrix subtract matrix by 1

glPushMartix() // Push matrix by 1
glRotate(....) // rotate robot legs
draw_robot_legs()
glPopMatrix() // Pop matrix subtract matrix by 1

glPopMatrix() // Pop matrix subtract matrix by 1

same results matrix is back at zero.



Originally posted by Stef:
Thanks Mikael.
One more question:
Is that the best way since there is a limit for the Matrix Stack concerning Push and Pop(32)?
How can i make one Object being moved
by translation and rotation when it is selected and the others not without defining every object with its own PushMatrix and Popmatrix??
Like this:
Pushmatrix()
obj1
obj2
obj3
.
.
.
Popmatrix

Now i have selected Obj3
What to do to rotate just Obj3 now??

Stef
05-04-2002, 08:11 AM
Thanks all!
If the push/pop is not a problem then it's ok.
That would have been the only reason not to do it with Push/pop...