none
Problème avec World Space et Model Space en WPF RRS feed

  • Question

  • Bonjour,

     

    J'ai un souci avec ma Transform3D en WPF .

     

    J'ai lu les informations qui sont disponibles sur le site de Daniel Lehenbauerhttp://blogs.msdn.com/danlehen/archive/2004/08/08/210961.aspx       concernant les Rotation et la différence entre l'espace de la pièce "Model Space" et l'espace de mon viewport "World Space "
     

                  

    J'ai effectué une transformation de mon Model3DGroup suivant l'axe x de -90 degrès avec le code ci-dessous .

     

        RotateTransform3D myRotateTransform_1 = newRotateTransform3D(newAxisAngleRotation3D(newVector3D(1, 0, 0), -90));

                    (_robotArmReader3ds.NamedObjects[RobotModel3D] asModel3DGroup).Transform = myRotateTransform_1;

     

     

    Si j'ai bien suivi le blog de Daniel, mon repère Model Space s'est tourné de -90 degrès également selon x.
    Quand je regarde ma figure. L'objet s'est retouné de -90degrès comme je veux. Jusque la pas de problème.

     

    Si maintenant je veux retourner mon objet GeometryModel3D de mon Model3Dgroup selon l'axe z, par la commande ci-dessous, je remarque que la rotation se fait selon l'axe z  du repère ModelSpaceet non pas du world space.

     

    R otateTransform3D myRotateTransform = newRotateTransform3D(newAxisAngleRotation3D(newVector3D(0, 0, 1), Convert.ToInt32(Slider1.Value)), newPoint3D(0, 0, 0));

     

    (_robotArmReader3ds.NamedObjects["__RootModelsGroup"] asModel3DGroup).Transform = myRotateTransform;

     

    Ne devrait-t-il pas tourner selon le repère du WorldSpace?

     

    En plus si je veux maintenant faire tourner tout mon Model3Dgroup selon l'axe y de mon Model Space par la commande ci-dessous, il fait la rotation selon l'axe y de World space !!!

     

    RotateTransform3D myRotateTransform = newRotateTransform3D(newAxisAngleRotation3D(newVector3D(0, 0, 1), Convert.ToInt32(Slider1.Value)), newPoint3D(0, 0, 0));

                (_robotArmReader3ds.NamedObjects[Blade] asGeometryModel3D).Transform = myRotateTransform;

     

    Conclu: Si je fais une rotation d'un objet  Model3DGroup l'objet tourne selon les anciens repère ( le World Space) . Si je fais la rotation d'un GeometryModel3D appartenant au Model3DGroup, la rotation se fait par rapport au Model Space!!

     

    Merci pour votre aide,

    Sondos

     


     

    jeudi 17 juillet 2008 07:36