Hur man rita Sweet 3D-grafik för LED kuber (2 / 9 steg)
Steg 2: Hej kub: blinkar en voxel
Blinkar en enda voxel av och på är "hello world" av volymetriska program. Jag klistrar hela koden nedan, och jag ska gå igenom det rad för rad, men innan dess, jag vill spendera lite tid med den viktigaste funktionen i hela schabraket:
setVoxel (PVector position, färg col)
setVoxel visar en viss voxel en viss färg. Position PVector är representerar en (x, y, z) punkt och funktion bekymmer om avrundning samordnar den till ett heltalsvärde. Om voxel utanför display volymen, ignorerar funktionen bara det. Denna funktion är byggstenen för alla andra bilder som vi ska titta på, så det är bra att bekanta sig med den.
Här är resten av koden, rad-för-rad:
import L3D.*;
L3D kuben. definiera ett kub objekt att dra i
PVector voxel = nya PVector(3,3,3); Detta är den voxel som vi ska blinka. Voxlar intervallet från (0,0,0) till (7,7,7)
Starta genom att importera biblioteket och definiera ett L3D objekt, kub. Kub innehåller alla volymetriska data för LED cube, handtag ritning kub grafiken i simulering och kan också strömma data över wifi till L3D kuber i det lokala nätverket.
void setup() {
storlek (displayWidth, displayHeight, P3D);
kub = nya L3D(this); initiera objektet kub
cube.enableDrawing(); Rita den virtuell kub
cube.enableMulticastStreaming(); strömma data över UDP till någon L3D kuber som lyssnar på det lokala nätverket
cube.enablePoseCube(); automatiskt centrerar kuben och tillåter användaren att rotera bilden med musen
}
I setup() förklarar vi vilka bilder som ska vara P3D grafik. Det är viktigt om vi ska dra kub simulatorn--allt som är i 3D, och vi måste ställa in vår ritning sammanhang som något som klarar 3D-grafik.
kub = nya L3D(this); --Detta skapar en ny L3D kub. Kuberna är standard 8 x 8 x 8 voxlar
cube.enableDrawing(); --Det kommer att dra kuben i fönstret skiss centrerad kring (0,0,0) peka av grafik samband, i slutet av funktionen draw()
cube.enableMulticastStreaming(); --Detta tar alla kubdata och skickar det som ett UDP-multicast-paket till hela lokala nätverket. Om du har en L3D kub inrättas för att lyssna på nätverket, kommer att det Visa vad skärmen visar.
cube.enablePoseCube() positioner på simulatorn kub på skärmen och gör att du kan rotera kuben i 3D genom att dra musen. Om du inte ringer enablePoseCube, kommer att biblioteket dra kuben på (0,0,0) peka din grafik bakgrund.
void draw() {
Background(0); ställa in skärmens bakgrund till svart
Cube.Background(0); Ange alla voxlar i kuben till svart =
om ((frameCount%20) > = 10) //turn LED på för tio bildrutor, sedan off för tio bildrutor
cube.setVoxel (voxel, färg (255, 0, 0));
}
Cube.Background(0) anger alla voxlar i kuben till svart. Om jag ville ha bakgrunden till en annan färg, kan jag ange det med en annan färg datatype. Om jag ville bli bakgrunden grön, skulle jag skriva:
Cube.Background(Color(0,255,0));
Nästa, jag vill att blinka voxel. Behandlingen har en inbyggd Räknare kallas frameCount som ökas varje gång jag dra en ram. Som standard uppdateras en bearbetning skiss skärmen 60 gånger per sekund. Linjen
om ((frameCount%20) > = 10)
uppsättningar kub upp till flash tre gånger en andra. Jag tittar på frameCount modulo tjugo, som alltid kommer att ha ett värde från 0-19. Om frameCount % 20 är mindre än 10, om uttrycket utvärderas till falskt och ingenting händer--förblir voxel svart. Om frameCount % 20 är mellan 10 och 19, anger koden voxel på (3,3,3) till rött. frameCount % 20 håller looping runt, och voxel blinkar av och på.
Jag vet att det är en hel del, men inte svettas om du inte får allt ännu. Bara dra öppna en av exemplen från Processing library och börja mixtra med den. Du ska plocka upp tillräckligt snabbt.