#1
|
|||
|
|||
rotate object in relation of sth. else
Probably a simple question:
How do I rotate an object (node3d) in relation to another objects local coordinate system? For instance, I want to relatively rotate object1 by 1 degree in relation to the z-axis of object2s local coordinate system (roll of 1 degree according to object2). In another example I want to relatively rotate object1 by 1 degree in relation to the main view (roll of 1 degree according to main view). |
#2
|
|||
|
|||
You can use the matrix.preEuler methods to rotate objects relative to arbitrary coordinate frames. Here is how you would roll object1 relative to object2's coordinate frame:
Code:
m = object2.getMatrix() m.preEuler(0,0,1) object1.setQuat(m.getQuat()) Let me know if I misunderstood your question or you need more specific examples. |
#3
|
|||
|
|||
This is not exactly what I meant.
For illustrating I attached some screen shots: Left picture: Start position. object1 = blue torus, object2 = white torus) Middle picture: Your end position. Your code seems to copy the complete orientation of object2 to object1 Right picture: Desired end position. I want to rotate object1 according to the orientation of object2. Kinda object1.setEuler([0,0,45],viz.REL_LOCAL_of_object2) |
#4
|
|||
|
|||
Ok, it sounds like you want a hierarchical relationship between object1 and object2. In this case you would simply add object1 as a child to object2. When object2 is rotated, object1 will automatically rotate in object2's reference frame. If for some reason you don't want a to use a hierarchical relationship, then here is some code to manually compute the matrix:
Code:
euler = viz.Matrix.euler(0,0,roll) m1 = object1.getMatrix() m2 = object2.getMatrix() diff = m1 * m2.inverse() m2new = euler * m2 object2.setQuat(m2new.getQuat()) object1.setMatrix(diff * m2new) |
#5
|
|||
|
|||
Me gusta el code. Porque yo tengo code similar, pero esto code es mas fácil.
También, Penguin usted puede utilizar un objeto Link para esto, si no te gusta hierarchical.
__________________
Paul Elliott WorldViz LLC |
#6
|
|||
|
|||
Vous êtes fou mec. J'ai comme vous, mais vous êtes fou.
|
#7
|
|||
|
|||
Thank you, the code works best for me! I only did some minor changes: translating to origin before rotating:
Code:
euler = viz.Matrix.euler(0,0,roll) m1 = object1.getMatrix() m2 = object2.getMatrix() m1.setTrans(0,0,0) m2.setTrans(0,0,0) diff = m1 * m2.inverse() m2new = euler * m2 object2.setQuat(m2new.getQuat()) m1new = diff * m2new m1new.setTrans(object1.getPosition(viz.ABS_GLOBAL)) object1.setMatrix(m1new) |
Thread Tools | |
Display Modes | Rate This Thread |
|
|
Similar Threads | ||||
Thread | Thread Starter | Forum | Replies | Last Post |
retrieve Object names | Geoffrey | Vizard | 11 | 12-11-2009 05:26 AM |
how to pick up the object, move and rotate using mouse | nasr | Vizard | 5 | 05-05-2009 04:11 AM |
reseting an object | durf | Vizard | 3 | 03-18-2009 12:48 AM |
Child Object Rotation | paulgoldberg | Vizard | 5 | 09-05-2006 12:33 PM |
rotate to object | jargon | Vizard | 1 | 08-08-2005 01:20 PM |