[RESOLU] [MY AL] Problème de Quaternion sur une matrice en C#[Résolu]

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
Artcraft
Messages : 33
Inscription : 21 Août 2019 13:38

[RESOLU] [MY AL] Problème de Quaternion sur une matrice en C#[Résolu]

Message par Artcraft » 24 Août 2019 13:39

Bonjour,

j'ai un souci de matrice, lorsque j'applique une rotation sur l'axe Z de mon quaternion,
la matrice applique un scale uniform dessus.

Code : Tout sélectionner

for (int i = 0; i < _Count; i++)
        {
            _Position[i] = new Vector3(0f, -0.66f, 0f);
            _Rotation[i] = new Quaternion(0f, 0f, 0f, 1f);
            _Scale[i] = new Vector3(Mathf.Clamp((AudioCraft._samples[i] * 100),1,3), Mathf.Clamp((AudioCraft._samples[i] * 100), 1, 3), 1f);
            _Matrix[i] = Matrix4x4.TRS(_Position[i], _Rotation[i], _Scale[i]);
          }
je suis un peu bloqué car j'aimerais faire tourner mes objets en appliquant un timer multiplié par un Array dessus type :

Code : Tout sélectionner

float _Timer = Time.time;
_Rotation[i] = new Quaternion(0f, 0f, Timer * i, 1f);
A savoir que la matrice est appliquée sur un drawMesh :

Code : Tout sélectionner

Graphics.DrawMesh(mesh,_Matrix[i], material, 0, null, 0, block);
Quelquun aurait une solution ?
Dernière édition par Artcraft le 26 Août 2019 18:55, édité 1 fois.

Avatar de l’utilisateur
Max
Messages : 8763
Inscription : 30 Juil 2011 13:57
Contact :

Re: [MY AL] Problème de Quaternion sur une matrice en C#

Message par Max » 24 Août 2019 13:43

Bonjour
Artcraft a écrit :
24 Août 2019 13:39
je suis un peu bloqué car j'aimerais faire tourner mes objets en appliquant un timer multiplié par un Array dessus type :
Wouha, matrice, quaternion...
Tout cela parait bien compliqué pour une rotation. Pour tes objets, les fonctions de base transform.Rotate ou éventuellement transform.rotation ne font-elles pas l'affaire ?
Image
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ

Artcraft
Messages : 33
Inscription : 21 Août 2019 13:38

Re: [MY AL] Problème de Quaternion sur une matrice en C#

Message par Artcraft » 24 Août 2019 14:04

Salut,

Bin en fait normalement oui, mais je suis obligé de passer par une matrice à cause de DrawMesh,
qui ne supporte que " translate et rotation"... le seul moyen d'y appliquer un scale c'est de passer par une "Matrix4x4".

Du coup j'ai pas l'impression d'avoir le choix... à moins de pouvoir appliquer un "transform.rotate" après ?

Avatar de l’utilisateur
Max
Messages : 8763
Inscription : 30 Juil 2011 13:57
Contact :

Re: [MY AL] Problème de Quaternion sur une matrice en C#

Message par Max » 24 Août 2019 15:59

Re,

J'avoue que j'aimerais bien que tu m'expliques (ou ré-explique, car ton soucis est certainement lié à ce sujet) aussi clairement que possible le but que tu poursuis.
Car je t'avoue que le chemin que tu suis me laisse vraiment perplexe. Quand je vois des trucs comme DrawMesh, Matrix4.4.TRS, etc... Le genre d'éléments qui au sein d'un script, ne sont vraiment employés que par quelques personnes dans le monde d'Unity...
Image
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ

Artcraft
Messages : 33
Inscription : 21 Août 2019 13:38

Re: [MY AL] Problème de Quaternion sur une matrice en C#

Message par Artcraft » 26 Août 2019 10:38

Salut Max,

merci de t’intéresser à mon problème..

Alors en fait j'essaie d'instancier un mesh avec un shader, et d'appliquer des transformations différentes pour chaque instance via des Array, sur les transforms ainsi que sur les paramètres du shader.

Objectif : Faire un visualisation temps réel avec le maximum de performances et des scripts les plus légers possible.

Visiblement, j'arrive à le faire qu'avec drawMesh car Instanciate ne permet pas d’accéder aux paramètres du shader pour chaque instance.

DrawMesh possède soit deux attributs : translate et rotate, soit une matrice 4x4 qui permet d'y appliquer un scale.

Donc j'essaie du coup d'appliquer une matrice afin de contrôler les trois paramètres translate, rotate et scale, d'ou Matrix4x4.TRS qui me permet d'appliquer des vector3 pour translate et scale, et un vect4 pour le quaternion.

C'est la que le souci arrive : lorsque j'applique une rotation sur l'axe Z, la matrice renvoie un scale uniform, ce qui ne m'arrange pas du tout sachant que sur les autres axes cela fonctionne normalement.

voila j'espère avoir correctement exposé mon problème.

Avatar de l’utilisateur
Max
Messages : 8763
Inscription : 30 Juil 2011 13:57
Contact :

Re: [MY AL] Problème de Quaternion sur une matrice en C#

Message par Max » 26 Août 2019 17:18

Salut,

Je comprend à peu près.
Mais dans ce cas, quand tu instancies tes objets, alors pourquoi ne pas aussi créer un material dédié pour chaque mesh ?
Je pense qu'a gérer après, cela serait bien plus simple.
Image
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ

Artcraft
Messages : 33
Inscription : 21 Août 2019 13:38

Re: [MY AL] Problème de Quaternion sur une matrice en C#

Message par Artcraft » 26 Août 2019 17:25

Eh bien ça revient à créer 512+ materiaux... ce qui me semble un peu bourrin non ?

Avatar de l’utilisateur
Max
Messages : 8763
Inscription : 30 Juil 2011 13:57
Contact :

Re: [MY AL] Problème de Quaternion sur une matrice en C#

Message par Max » 26 Août 2019 17:26

ben tu créés bien 512 objets....
(texture et shader restant quand à eux commun)
Image
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ

Artcraft
Messages : 33
Inscription : 21 Août 2019 13:38

Re: [MY AL] Problème de Quaternion sur une matrice en C#

Message par Artcraft » 26 Août 2019 17:48

Effectivement...

Bon ayant mis + de 4 jours à pondre mon code, j'ai un peu la flemme de tout balancer..

j'aimerais quand meme trouver une solution à mon Quaternion étant donné que le code est fini hormis cette matrice..

Avatar de l’utilisateur
Max
Messages : 8763
Inscription : 30 Juil 2011 13:57
Contact :

Re: [MY AL] Problème de Quaternion sur une matrice en C#

Message par Max » 26 Août 2019 18:11

Perso je n'attaquerais pas directement les composants du Quaternion avec le timer.
Mais je passerais plus surement par quelque chose comme:

Code : Tout sélectionner

    Vector3 eulerAngles;
...
	{ ....
        eulerAngles.z += Time.deltaTime * value;
        Quaternion rotation = Quaternion.Euler(eulerAngles.x, eulerAngles.y, eulerAngles.z);
	....}
Image
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ

Répondre

Revenir vers « (C#) CSharp »