Étape 2: Cube Bonjour : clignoter un voxel
Clignoter un voxel simple marche est le « hello world » de programmes volumétriques. Je suis coller tout le code ci-dessous et je vais passer par ligne par ligne, mais avant cela, je veux passer du temps avec la fonction la plus importante dans tout le tralala :
setVoxel (PVector, position, couleur, col)
setVoxel transforme un voxel donné une couleur particulière. La position PVector est représente un (x, y, z) point et la fonction se soucier arrondir les coordonnées en une valeur entière. Si le voxel est en dehors du volume de l’affichage, la fonction juste l’ignore. Cette fonction est la pierre angulaire de tous les autres graphiques que nous allons étudier, il est donc bon de se familiariser avec elle.
Voici le reste du code, ligne par ligne :
import L3D.*; L3D cube; //define a cube object to draw into PVector voxel=new PVector(3,3,3); //this is the voxel that we'll blink. The voxels range from (0,0,0) to (7,7,7)
Commencez par importer la bibliothèque et définition d’un objet L3D, cube. Cube contient toutes les données volumétriques pour le cube LED, poignées, dessiner les graphiques de cube dans la simulation et peut aussi flux de données via wifi aux cubes de L3D sur le réseau local.
void setup(){ size(displayWidth, displayHeight, P3D); cube=new L3D(this); //initialize the cube object cube.enableDrawing(); //draw the virtual cube cube.enableMulticastStreaming(); //stream the data over UDP to any L3D cubes that are listening on the local network cube.enablePoseCube(); //automatically centers the cube and allows the user to rotate it with the mouse }
Dans setup(), nous déclarons les graphismes d’être P3D graphiques. C’est important si nous allons dessiner le simulateur cube--tout ce qui est en 3D, et nous devons mettre en place notre contexte de dessin comme quelque chose qui peut gérer des graphiques 3D.
Cube = new L3D(this) ; --Cela crée un nouveau cube de L3D. Par défaut, les cubes sont 8 x 8 x 8 voxels
cube.enableDrawing() ; --Ceci dessinera le cube dans la fenêtre de dessin centrée autour du point (0,0,0) du contexte graphique, à la fin de la function draw()
cube.enableMulticastStreaming() ; --Cela prend toutes les données de cube et l’envoie comme un paquet de multidiffusion UDP sur votre réseau local entier. Si vous avez un cube de L3D configuré pour écouter sur votre réseau, il montrera que tout ce qui est affichage de l’écran.
cube.enablePoseCube() cube de simulateur se positionne sur l’écran et vous permet de faire pivoter le cube en 3D en faisant glisser la souris. Si vous n’appelez pas enablePoseCube, la bibliothèque dessinera le cube au point (0,0,0) dans votre contexte graphique.
void draw(){ background(0); //set the screen's background to black cube.background(0); //set all the voxels in the cube to black= if ((frameCount%20)>=10) //turn the LED on for ten frames, then off for ten frames cube.setVoxel(voxel, color(255, 0, 0)); }
Cube.Background(0) définit tous les voxels dans le cube au noir. Si je voulais le milieu pour être une autre couleur, je pourrais le spécifier avec un autre type de données de couleur . Si je voulais tourner le fond vert, J’écrirais :
Cube.Background(Color(0,255,0)) ;
Ensuite, je tiens à cligner des yeux le voxel. Traitement intègre un compteur appelé frameCount qui s’incrémente chaque fois que j’ai dessiner une image. Par défaut, une esquisse de traitement met à jour l’écran 60 fois par seconde. La ligne
Si ((frameCount%20) > = 10)
Jeux cube jusqu'à flash trois fois une seconde. Je cherche à frameCount modulo vingt ans, ce qui aura toujours une valeur de 0 à 19. Si frameCount %20 est inférieur à 10, l’instruction if a la valeur false et que rien ne se passe--le voxel reste noir. Si frameCount %20 est entre 10 et 19, le code définit le voxel à (3,3,3) au rouge. frameCount %20 conserve une boucle autour et le voxel clignote marche.
Je sais que c’est beaucoup, mais ne le Suez pas si vous n’obtenez pas tout encore. Tirez juste ouvrir un des exemples de la bibliothèque de traitement et le début bricoler avec elle. Vous allez ramasser assez rapidement.