Page 1 sur 2

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

Publié : 24 Août 2019 13:39
par Artcraft
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 ?

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

Publié : 24 Août 2019 13:43
par Max
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 ?

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

Publié : 24 Août 2019 14:04
par Artcraft
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 ?

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

Publié : 24 Août 2019 15:59
par Max
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...

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

Publié : 26 Août 2019 10:38
par Artcraft
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.

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

Publié : 26 Août 2019 17:18
par Max
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.

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

Publié : 26 Août 2019 17:25
par Artcraft
Eh bien ça revient à créer 512+ materiaux... ce qui me semble un peu bourrin non ?

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

Publié : 26 Août 2019 17:26
par Max
ben tu créés bien 512 objets....
(texture et shader restant quand à eux commun)

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

Publié : 26 Août 2019 17:48
par Artcraft
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..

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

Publié : 26 Août 2019 18:11
par Max
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);
	....}