Manipulation de primitives emballées

 

Manipulation de primitives emballées

Si vous considérez les prims compressées comme un point qui représente une forme, cela signifie que si vous déplacez le point, vous déplacez la forme. Utilisez une sop d'édition pour une manipulation directe, ou une sop de transformation, ou un réseau vop, la traduction de prims compressées est facile.

La rotation et l'échelle sont une autre affaire. Un point par définition n'a pas de rotation ou d'échelle, donc la rotation ou la mise à l'échelle d'une prim condensée n'a aucun effet. Comment peut-il être manipulé ?

Si vous regardez la vue primitive dans la feuille de calcul de géométrie, il y a une liste déroulante "intrinsèques" que vous n'avez probablement pas remarquée auparavant. Ce sont principalement des attributs en lecture seule comme la longueur de la courbe, la boîte englobante, etc., mais pour les prims compressées, il y a quelques autres choses. Ce qui nous intéresse, c'est « transformer ». Activez cela dans la liste déroulante et vous pouvez voir qu'il s'agit d'une matrice de transformation. Ceci est à la fois capable de lire et d'écrire, nous pouvons donc l'utiliser pour modifier la rotation et l'échelle de la prim compressée.

Mettez ceci dans un débat primitif, et cela fera tourner les prims emballées autour de leur axe Y :

matrice3  m  =  ident (); 
angle flottant  = @ Temps ; axe vectoriel = { 0 , 1 , 0 } ;  
   

tourner ( m ,  angle ,  axe ); 
setprimintrinsic ( 0 ,  "transformer" ,  @ primnum ,  m );


Semblable aux exemples répertoriés précédemment, nous configurons d'abord une matrice de transformation par défaut en tant que 'm' (appelée matrice d'identité, d'où l'appel à ident() ), et configurons un angle et un axe autour desquels tourner. Ensuite, un appel fidèle à rotate() qui fera pivoter notre matrice m. Ensuite, nous poussons cette matrice dans l'attribut de transformation intrinsèque.

Idéalement, vous devriez simplement écrire quelque chose comme '@transform = m', mais les intrinsèques ne peuvent pas être définis de cette façon, d'où l'appel à setprimintrinsic(). Comme d'autres fonctions vex similaires, il doit connaître la géo à manipuler (0, ou la première entrée du wrangle), le nom de l'attribut ('transform'), la primitive à manipuler ( @primnum ), et la valeur (m) .

Cela semble fastidieux, mais s'adapte très bien, les gains de performances en valent la peine.

Notez que tout ceci sert à modifier les transformations prim compressées après leur création. Plus souvent, vous configurerez des points pour alimenter une copie, et la copie créera les prims emballées pour vous. Dans ce cas, il est généralement plus facile de définir la rotation et l'échelle de la manière standard par copie/instance, c'est-à-dire, utilisez @orient, @pscale, @rot etc comme également expliqué dans les exemples précédents.

0 Commentaires