Stap 2: Hello kubus: een voxel knipperen
Knipperen van een enkele voxel af en aan, is de "hello world" van volumetrische programma's. Ik ben het plakken van de hele code hieronder, en ik ga via het regel voor regel, maar voordat dat, wil ik wat tijd doorbrengen met de belangrijkste functie in de hele keet:
setVoxel (PVector positie, kleur col)
setVoxel draait een bijzondere voxel een bepaalde kleur. De positie PVector is vertegenwoordigt een (x, y, z) punt, en de functie zorgen over de coördinaten worden afgerond op een geheel getal. Als de voxel buiten het volume van de weergave is, negeert de functie gewoon het. Deze functie is de bouwsteen van alle andere afbeeldingen die we kijken, dus het is goed om ermee vertrouwd te raken.
Hier is de rest van de code, lijn door lijn:
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)
Start door het importeren van de bibliotheek en een L3D-object definiëren, cube. Kubus bevat alle volumetrische gegevens voor de kubus LED, grepen de kubus grafische tekening in simulatie en ook gegevens kunt streamen via wifi tot L3D kubussen op het lokale netwerk.
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 }
In Setup verklaren wij de afbeeldingen als P3D graphics. Dat is belangrijk als we gonna trekken de kubus simulator--alles wat in 3D, en we hebben onze tekening context als iets die overweg kan met 3D-afbeeldingen instellen.
kubus = nieuwe L3D(this); --Hiermee maakt u een nieuwe kubus van L3D. De kubussen zijn standaard 8 x 8 x 8 voxels
cube.enableDrawing(); --dit de kubus zal trekken in de schets venster gecentreerd rond het (0,0,0) punt van de grafische context, aan het einde van de draw() functie
cube.enableMulticastStreaming(); --Dit neemt alle de kubusgegevens en stuurt het uit als een multicast-UDP-pakket naar uw hele lokale netwerk. Hebt u een kubus van de L3D ingesteld op luisteren op uw netwerk, zal het wat het scherm wordt weergegeven.
cube.enablePoseCube() van de simulator kubus posities op het scherm en kunt u draaien de kubus in 3D door de muis te slepen. Als u niet enablePoseCube aanroept, zal de bibliotheek de kubus tekenen op het (0,0,0) punt in het kader van uw afbeeldingen.
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) stelt alle de voxels in de kubus op zwart. Als ik de achtergrond een andere kleur wilde, kon ik het met een andere kleur datatype opgeven. Als ik groen van de achtergrond wilde, zou ik schrijven:
Cube.background(Color(0,255,0));
Vervolgens wil ik de voxel knipperen. Verwerking heeft een ingebouwde teller genaamd frameCount die wordt verhoogd telkens wanneer ik een frame tekenen. Standaard, door een processing schets 60 keer per seconde, het scherm bijwerkt. De lijn
Als ((frameCount%20) > = 10)
sets de kubus tot flash drie keer een tweede. Ik ben op zoek op frameCount modulo twintig, die altijd een waarde van 0-19 zal hebben. Als frameCount % 20 minder dan 10 is, de if -instructie resulteert in ONWAAR, en niets gebeurt--blijft de voxel zwart. Als frameCount % 20 tussen 10 en 19, wordt de voxel op (3,3,3) door de code ingesteld op rood. frameCount % 20 houdt strik rond en de voxel knippert af en aan.
Ik weet dat veel, maar niet het zweet als je niet alles nog. Trek gewoon open één van de voorbeelden van de Processing library en start met het knutselen. U zult het oprapen snel genoeg.