Stap 6: 3D primitieven: bollen
Dus laten we eens kijken naar enkele werkelijke vaste vormen tekenen. Een bol is een goede plaats om te beginnen. Laten we zeggen dat we vestigen van een bol met straal r willen, gecentreerd op een punt p.
Een ding die ik met kubus graphics gemerkt heb--solide bollen niet eigenlijk zeer goed--kijken met de meeste afbeeldingen, die u wilt tekenen van het oppervlak, maar de binnenkant leeg laat. Vult u de hele shape, krijg je een zeer heldere blob, maar het niet eventuele aanvullende informatie over de shape toe te voegen. Resolutie is zeer beperkt in blokjes, dus ik probeer te houden van de LED's tot het minimum dat ik nodig hebben en zich richten op het overbrengen van de gegevens van de shape.
Tekening in een kubus is vergelijkbaar met de processen die ik gebruik om te tekenen in CAD. Ik zou beginnen met het tekenen van een cirkelvormige dwarsdoorsnede van LEDs, en vervolgens draaien die doorsnede rond een as maken een bol. Als u wilt tekenen van een cirkel, die ik zou kunnen schrijven een eenvoudige lus zoals:
for(float angle=0;angle<2*PI;angle+=.1) setVoxel(p.x + radius*cos(angle), p.y + radius * sin(angle), p.z, color(255));
Om te draaien die cirkel, zou ik de cirkel lus binnen een lus, nesten als volgt:
for(float phi=0;phi<PI;phi+=0.1) for(float angle=0;angle<2*PI;angle+=.1) setVoxel(p.x + radius*cos(angle)*sin(phi), p.y + radius * sin(angle) * sin(phi), p.z + r*cos(phi), color(255));
Bada bing bada boom, ik heb een bol!
Natuurlijk, is dit ingebouwd in de bibliotheek. In plaats van het schrijven van deze lus zelf, kunt u alleen bellen
L3D.sphere(PVector center, float radius, color col)
en het object zal zorg dragen voor de opstelling van een bol in de kubus.
Voor meer info, Bekijk het voorbeeld van de bollen in de bibliotheek, die is wat de bovenstaande geanimeerde gif gegenereerd.