IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement 2D, 3D et Jeux Discussion :

Rotation + java3D


Sujet :

Développement 2D, 3D et Jeux

  1. #1
    Membre habitué Avatar de cysboy
    Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    221
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 221
    Points : 168
    Points
    168
    Par défaut Rotation + java3D
    Bonjour,
    J'aimerais être aiguiller sur la marche à suivre pour faire un effet des plus basiques...
    Mais je ne vois pas du tout comment faire...

    En gros j'ai créer (grosso-modo) une cuisse et une jambe. Et j'aimerai que cette jambe puisse s'articuler autour du bout de ma cuisse (une sphere représentant une rotule y est). Cependant toutes mes tentatives pour animer ce morceau se sont avérées sans succès....

    En effet, ma jambe bouge, mais autour d'un axe du repère... et pas par rapport à un point fixe donné....

    Si quelqu'un à déjà eut ce problème... ou si une âme charitable peu bien m'orienté dans mes recherches (même me dire comment faire... j'accepte aussi ).

    D'avance merci @ vous !

    PS:
    Je vous met tout de même mon morceau de code...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
     
    public BranchGroup createSceneGraph()
    	{
    		BranchGroup parent = new BranchGroup();
     
    		Transform3D translate = new Transform3D();
    		translate.setTranslation(new Vector3f(0, 1, 0));
     
    		Transform3D rotate = new Transform3D();
    		rotate.rotY(Math.PI/4);		
    		translate.mul(rotate);
     
    		//***************************************
     
    		TransformGroup jambe = new TransformGroup();
    		jambe.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
    		jambe.addChild(createJambeD());
     
    		TransformGroup cuisse = new TransformGroup();
    		cuisse.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
    		cuisse.addChild(createCuisseD());
     
    		/**************************************/
     
    		Alpha alpha = new Alpha(10, 4000);
    		alpha.setMode(Alpha.DECREASING_ENABLE|Alpha.INCREASING_ENABLE);
    		alpha.setDecreasingAlphaDuration(4000);
    		alpha.setStartTime(System.currentTimeMillis());
     
    		Transform3D axe = new Transform3D();
    	    AxisAngle4f axisAngle = new AxisAngle4f(0, 0, 1, (float)Math.PI/4);
    	    axe.set(axisAngle);
     
    		RotationInterpolator rotator = new RotationInterpolator(alpha, jambe);
    		rotator.setTransformAxis(axe);
     
    		rotator.setSchedulingBounds(new BoundingSphere(new Point3d(0, 0, 0), 10));
    		jambe.addChild(rotator);
     
    		/**************************************/
     
    		PointLight pLight = new PointLight();
    		pLight.setColor(new Color3f(1f, 1f, 0.5f));
    		pLight.setPosition(0, 0, 1);
    		pLight.setInfluencingBounds(new BoundingSphere());
    		parent.addChild(pLight);
     
     
    		TransformGroup transform = new TransformGroup(translate);
    		transform.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
    		transform.addChild(cuisse);
    		transform.addChild(jambe);
     
    		parent.addChild(transform);
     
     
    		Background bg = new Background(new Color3f(1, 1, 1));
    		bg.setApplicationBounds(new BoundingSphere());
    		parent.addChild(bg);
     
    		return parent;
    	}
     
     
     
    	private TransformGroup createCuisseD()
    	{
    		Cylinder cuisse = new Cylinder(0.03f, 0.32f);
    		Sphere genoux = new Sphere(0.04f);
     
    		Transform3D translateGenoux = new Transform3D();
    		translateGenoux.setTranslation(new Vector3f(0.0f, -0.18f, 0.f));
     
    		TransformGroup gen = new TransformGroup(translateGenoux);
    		gen.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
    		gen.addChild(genoux);
     
     
     
    		Transform3D translateCuisse = new Transform3D();
    		translateCuisse.setTranslation(new Vector3f(-0.066f, -0.76f, -0.01f));
     
    		Transform3D rot = new Transform3D();
    		rot.rotZ(-Math.PI/24);
     
    		translateCuisse.mul(rot);
     
    		TransformGroup tg = new TransformGroup(translateCuisse);
    		tg.addChild(cuisse);
    		tg.addChild(gen);
     
    		return tg;
    	}
     
     
    	private TransformGroup createJambeD()	
    	{
    		Cylinder cuisse = new Cylinder(0.026f, 0.34f);
    		Box pied = new Box(0.05f, 0.03f, 0.1f, null);
     
    		Transform3D translateGenoux = new Transform3D();
    		translateGenoux.setTranslation(new Vector3f(0.0f, -0.2f, 0.05f));
     
    		TransformGroup gen = new TransformGroup(translateGenoux);
    		gen.addChild(pied);
     
     
     
    		Transform3D translateCuisse = new Transform3D();
    		translateCuisse.setTranslation(new Vector3f(-0.09f, -1.1f, -0.01f));
     
    		Transform3D rot = new Transform3D();
    		rot.rotZ(-Math.PI/12);
     
    		//translateCuisse.mul(rot);
     
    		TransformGroup tg = new TransformGroup(translateCuisse);
    		tg.addChild(cuisse);
    		tg.addChild(gen);
     
    		return tg;
    	}

  2. #2
    Rédacteur
    Avatar de bafman
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    2 574
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2003
    Messages : 2 574
    Points : 5 323
    Points
    5 323
    Par défaut
    il faut gérer une pile de matrice.
    en gros, à chaque fois que tu veut faire une transformation relative à une transformation précédente, tu empile une matrice.
    * Il est infiniment plus simple de faire rapidement un code qui marche que de faire un code rapide qui marche
    * pour faciliter les recherches, n'oubliez pas de voter pour les réponses pertinentes
    Mes articles

  3. #3
    Membre habitué Avatar de cysboy
    Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    221
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 221
    Points : 168
    Points
    168
    Par défaut
    J'ai chercher un peu mais... on n'utilise pas directement de matrice avec Java3D...
    De plus je ne sais pas m'en servir...
    Quelqu'un aurai un avis sur mon problème...?

    Merci d'avance !

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 36
    Points : 32
    Points
    32
    Par défaut
    J'ai exactement le même genre de problème et j'en connais la cause. Toutes les transformations 3D sont faites à partir de l'orginie du repère par defaut de JAVA3D. donc si tu as pas appliqué ta rotule sur cette fameuse origine c'est dans l'os a moins que quelqu'un ai trouvé une solution dans ce cas là je suis plus que preneur.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 36
    Points : 32
    Points
    32
    Par défaut
    J'ai reussi a decalé ce fameux point d'origine, par contre après pour avoir plusieurs articulation avec des points de repère différent, je sèche.

    Bonne chance

Discussions similaires

  1. [Java3D] Approximation lors de rotations
    Par eternalcm dans le forum 3D
    Réponses: 1
    Dernier message: 25/05/2009, 19h56
  2. Rotation de la camera en java3D
    Par cereal dans le forum 3D
    Réponses: 2
    Dernier message: 04/12/2008, 16h38
  3. [Java3D]Centre de rotation
    Par ancrou dans le forum 3D
    Réponses: 1
    Dernier message: 05/02/2008, 15h43
  4. Rotation en Java3D
    Par barthelus76 dans le forum 3D
    Réponses: 1
    Dernier message: 09/05/2006, 16h08
  5. Réponses: 9
    Dernier message: 30/08/2005, 20h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo