Créer des bords avec vops (et vex)

 

Créer des bords avec vops (et vex)

Créatures de suie.gif

Télécharger la scène : File:soot_vex_vs_vops.hipnc

Commencé comme une tentative de faire des trucs graphiques de mouvement plexus de pointe, s'est terminé comme des choses stupides et nerveuses d'araignées de suie de Sprited Away.

Cet exemple fait appel à plusieurs choses ; créer des primitives, des recherches de nuages ​​de points et des sous-réseaux if/while.

Le réseau vop dans cette scène est un peu difficile à comprendre car il est imbriqué à plusieurs niveaux. La chose à garder à l'esprit ici est que les réseaux vop fonctionnent en parallèle sur tous les points à la fois, vous devez donc structurer votre logique en conséquence. Un sous-réseau « si » semblait être le moyen le plus simple de tout garder en ordre. Donc:

  1. si le point actuel est dans un groupe appelé 'suie', continuez, sinon sautez (c'est-à-dire que nous supposerons pour le reste de la logique que nous travaillons avec les corps, sinon nous développerions des bords de tous les points à tous les autres points)
  2. ouvrez un nuage de points (dans ce cas, pas un nuage pré-enregistré sur le disque, mais la géo d'entrée en direct), définissez le rayon de recherche assez large et le maximum de points renvoyés à 8
  3. démarrer une boucle while qui itérera sur chaque point trouvé. dans la boucle:
    1. créer une primitive. cela prend un tableau de points et tracera des bords entre eux
    2. ajouter le point du corps
    3. obtenir l'identifiant du point trouvé dans cette itération de boucle (s'il ne trouve pas de point, retourne -1, ce qui signifie qu'aucun point ne sera ajouté à la primitive)
    4. ajouter le point de pied
    5. exécuter la boucle while suivante, itérer jusqu'au prochain point trouvé


J'ai revisité cette configuration et j'ai réalisé que c'était un bon exemple de cas où le vops devient un peu difficile à manier. Si vous avez suivi jusqu'ici et que, comme moi, vous avez résisté tranquillement aux vex et aux querelles, regardez à quel point c'est plus propre dans le code :

float  maxdist  =  ch ( 'maxdist' ); 
int  numlegs  =  chi ( 'jambes' ); 
entier  pts [] ; 
int  prim ; 
int  je ;

if  ( @ group_soot == 1 )  { 
  pts  =  nearpoints ( 0 , @ P , maxdist , numlegs ); 
  for  ( je = 1 ;  je < len ( pts );  je ++ )  { 
     prim  =  addprim ( 0 , 'polyline' ); 
     addvertex ( 0 , prim , @ptnum ) ; 
     addvertex( 0 , prim , pts [ je ]); 
  } 
}

D'abord, il configure quelques variables, puis a une boucle for à l'intérieur d'un bloc if. Le if vérifie si un point est dans le groupe 'suie'. Si c'est le cas, il utilise nearpoints() pour trouver les points 'numlegs' les plus proches, avec une distance 'maxdist'. Il parcourt ensuite les points qu'il a trouvés, mais notez qu'il commence par 'for(i=1...' plutôt que 'for(i=0...' qui est la norme. C'est parce que les points proches trouveront le courant point comme l'un des points les plus proches. Évidemment, nous ne voulons pas cela. Heureusement, nearpoints () stocke les résultats classés par distance, avec le plus proche en premier, nous pouvons donc simplement ignorer le premier point (qui, en raison de la façon dont vex stocke les tableaux, serait appelé pts[0]), et passez directement au second ( 'pts[1]').

Quoi qu'il en soit, dans la boucle for, nous créons une primitive polyligne vide et lui ajoutons 2 sommets ; le point courant (@ptnum), qui est le corps, et pts[i], qui est l'emplacement du pied.

Si vous ignorez le test de groupe initial pour permettre à tous les points de se lier à tous les points, vous obtenez les éléments graphiques animés de style plexus. Faites bouger tous les points, ajoutez de la couleur en mode boîte englobante, vous êtes sur la bonne voie pour la rock star des animations Vimeo :

Bord grandir anim.gif

Télécharger la scène : File:webbing_v01.hip

Créer des bords avec connecter des pièces adjacentes

Télécharger le fichier hip : plexus_connect_adjacent_points.hipnc

Pratique comme tout ce qui est, j'ai découvert récemment qu'un sop 'connecter les pièces adjacentes', en mode 'points adjacents', crée des bords pour vous. Si vous jetez un coup d'œil à l'intérieur, vous pouvez voir un code similaire niché dans un nœud wrangle. Tant pis.

0 Commentaires