Manipulation de primitives compressées

 Si vous considérez les nombres premiers compressés comme un point qui représente une forme, cela signifie que si vous déplacez le point, vous déplacez la forme. Utilisez un sop d’édition pour la manipulation directe, ou un sop de transformation, ou un réseau vop, la traduction des prims emballés autour 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’un prim emballé 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. La plupart du temps, ce sont des attributs en lecture seule comme la longueur de la courbe, la boîte englobante, etc., mais pour les prims emballés, il y a quelques autres choses. La « transformation » nous intéresse. Activez cela à partir de la liste déroulante, et vous pouvez voir qu’il s’agit d’une matrice de transformation. Ceci est à la fois capable de lecture et d’écriture, nous pouvons donc l’utiliser pour modifier la rotation et l’échelle des prims compressées.


Mettez cela dans une querelle primitive, et il fera pivoter les prims emballés autour de leur axe Y:


matrix3 m = ident();
float angle = @Time;
vector axis = {0,1,0};

rotate(m, angle, axis);
setprimintrinsic(0, "transform", @primnum, m);


Comme dans les exemples répertoriés précédemment, nous avons d’abord configuré une matrice de transformation par défaut en tant que 'm' (appelée matrice d’identité, d’où l’appel à ident() ), et configuré un angle et un axe pour pivoter. Ensuite, un appel fidèle à rotate() qui fera pivoter notre matrice m. Ensuite, nous poussons cette matrice dans l’attribut intrinsic-transform.


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


Semble délicat, mais échelles vraiment bien, les gains de performance en valent la peine.


Notez que tout cela permet de modifier les transformations prim compressées après leur création. Le plus souvent, vous configurerez des points pour alimenter une copie sop et demanderez à la copie de créer les prims emballés 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 de la copie / instance, c’est-à-dire d’utiliser @orient, @pscale, @rot etc., comme expliqué dans les exemples précédents.





0 Commentaires