I have a GLTF file with a “deep” group/child
The GLTF contain a group that contain a group that contain a group that contain a geometry.
Each group may have different rotation/position.
I’m trying to do some kind of explosed view, where each pieces will translate in the opposite direction of the whole GLTF object (his center).
I calculated the center of the whole object (in world space (position)).
I got the center position of each pieces indivially (in world space (position)).
I calculated where I need to translate each pieces (in world space (position)).
Problem is, I don’t know how to setPosition of an object, in world space.
When I try, the rotation of the parent and olders parent are affecting the translation.
I tried with
node.matrix.setPosition( newPos ),
node.translateX() which all gave me the same result.
I think it is possible with
node.matrixWorld.setPosition( newPos ), but I don’t think I understand how to use it, as it doesn’t change anything (nothing move).
If this isn’t clear enough, I can create a codeSandBox with my example if that can help you to help me ^^
The idea is to transform the target position in world space to object space and then set it to
Object3D.position. The transformation can be done by using Object3D.worldToLocal().
Tried, but it doesn’t seems to do what I expected.
Here is what I get without worldToLocal()
(cyan is center of the scene [0,0,0])
(yellow is center of whole object)
(left purple is center of piece when initialized)
(right purple is where I expect the piece to be moved)
(red piece is the piece after I move it)
And here with worldToLocal()
It is actually better, I mean, distance from [0,0,0] are same between real position and where it should be.
But it seems like there is a rotation from a parent still affecting it
Made a small codesandbox
(it acts a bit weirdly though)
It’s made with
React Three Fiber, so some things might a bit different than “Pure Js”.
function Pieces is the one that matter.
Cyan Cube is [0,0,0]
Yellow Cube is center of the whole GLTF
Purple Cube is center Position of the piece
Red Cube is where I try to translate the piece
Red piece is the piece I try to move
Hope that will helps
It is as if worldToLocal is doing parentToLocal