[Résolu][MY -AL ] Rotation Parent Enfant via Matrices

Pour les scripts écrits en C#
Règles du forum
Merci de respecter la NOMENCLATURE suivante pour vos TITRES de messages :

Commencez par le niveau de vos scripts
DB = Débutant
MY = Moyen
CF = Confirmé

Puis le domaine d'application
-RS = Réseau
-AL = Algorithmie

Exemple :

[DB-RS] Mouvement perso multijoueur
Avatar de l’utilisateur
DevAmat
Messages : 435
Inscription : 23 Nov 2016 11:50

[Résolu][MY -AL ] Rotation Parent Enfant via Matrices

Message par DevAmat » 18 Jan 2017 13:10

Salut tout le monde, donc je vais essayer d’être clair pour mon soucis...
Pour un projet je dois faire un éditeur de trajectoire pour des vaisseaux en gros.

Donc je suis dans la partie EditorMode. J'ai une classe Spline qui hérite de MonoBehaviour, dans cette classe j'ai un tableau de splinePoint qui est une classe personnalisée qui n'hérite pas de MonoBehaviour. Grace a une classe SplineEditor je gère la création des splinePoint en mode éditeur (donc pas en runtime). Je peux cliquer sur ces splinePoint les déplacer etc. J'ai tracer la trajectoire entre chaque point cool quoi ça marche bien de ce coté la :coeur: .

Mon souci est qu'il n'existe pas de relation parent enfant entre mes splinePoint et ma classe spline ou ils sont stockés. Donc je dois la recréer moi meme. Si il ne s'agissait que du déplacement se ne serait pas un soucis c'est assez évident mais j'aimerai bien recréer la rotation parent enfant et la je me heurte a mes lacunes techniques :gene: .

Ou j'en suis actuellement c'est que lorsque le transform de ma spline est modifiée je parcours mon tableau de splinePoint pour tenter d'effectuer les bonnes transformations et la c'est un peu le drame.

Code : Tout sélectionner

localToWorldMatrix = transform.localToWorldMatrix;
        for (int i = 0; i < tSplinePoints.Length; i++)
        {
            tSplinePoints[i].ChildRotation(localToWorldMatrix);
        }

Code : Tout sélectionner

public void ChildRotation(Matrix4x4 parentWorldMatrix)
    {
        position = parentWorldMatrix.MultiplyPoint3x4(position);
    }
Donc j'imagine que je suis loin du compte si une personne pouvait m’aiguiller, car je récupère la matrice du parent mais je ne sais pas comment l'appliquer a la position des enfants via leur matrices...

Désolé si c'est un peu long merci a ceux qui auront lu! :)
Si vous avez des lien ou tuto pour ce genre de chose aussi merci!

ps: vous avez le droit de me dire qu'il faut que je taff les maths :gene2:
Dernière édition par DevAmat le 19 Jan 2017 11:38, édité 1 fois.

Avatar de l’utilisateur
DevAmat
Messages : 435
Inscription : 23 Nov 2016 11:50

Re: [MY -AL ] Rotation Parent Enfant via Matrices

Message par DevAmat » 19 Jan 2017 11:35

Bon j'ai trouvé mon erreur donc la encore je vais essayer d’être clair :ugeek: . Donc dans ma fonction ChildRotation je faisait ceci:

Code : Tout sélectionner

public void ChildRotation(Matrix4x4 parentWorldMatrix)
    {
        position = parentWorldMatrix.MultiplyPoint3x4(position);
    }


Le souci étant que je ne faisais pas la convertion de ma position global et ma position local donc je modifie le code:

Code : Tout sélectionner

public void ChildRotation(Matrix4x4 parentWorldMatrix)
    {
        position = parentWorldMatrix.MultiplyPoint3x4(LOCALposition);
    }


Et je rajoute ce morceau de code a chaque mis a jour de ma position:

Code : Tout sélectionner

public Vector3 Position
	{
		get
		{
			return position;
		}
		set
		{
			position = value;
			LOCALPosition = spline.transform.InverseTransformPoint(position);  // La spline est l'objet qui contient les points et 				                                                                                                                                                                  	       donc le parent
		}
	}
Voila! :)

Répondre

Revenir vers « (C#) CSharp »