Stap 3: Lopen die lijn
Tekening van een enkele voxel is allemaal goed en wel, maar soms u wilt tekenen meer complexe dingen. Dat is waar de functie
L3D.line(PVector start, PVector end, color col)
komt handig. Zoals de naam al aangeeft, het wordt een lijn getekend vanaf de start aan de eindpunten , en tekent het in de opgegeven kleur. Als u het uiterlijk van deze lijn, hebt u Jack Bresenham bedank--schreef hij deze handige functie genaamd Bresenham van lijn algoritme die we gebruiken om bijna elke lijn trekken in alle computerafbeeldingen. De bibliotheek gebruikt een 3D uitvoeringvan het Bresenham algoritme om te tekenen binnen de kubus.
Neem een kijkje op het voorbeeld van de Line in de bibliotheek. Meeste is het zelfde zoals we zagen in het voorbeeld van knipperen . Het verschil zit in de draw() functie:
void draw(){ background(0); cube.background(0); for (float theta=0; theta<2*PI; theta+=PI/3) { PVector start=new PVector(cube.center.x+radius*cos(theta), 0, cube.center.z+radius*sin(theta)); PVector end=new PVector(cube.center.x+radius*cos(theta+lineAngle), cube.side-1, cube.center.z+radius*sin(theta+lineAngle)); color col=cube.colorMap(theta%(2*PI), 0, 2*PI); cube.line(start, end, col); } lineAngle+=.05; //the cube library draws the cube at the end of the draw() function. //PoseCube() translates and rotates the graphics context to the right angle to display the cube. //The displayed cube will be centered about the graphics context's (0,0,0) point poseCube(); }
In deze functie ben ik zes lijnen tekenen. De begin- en eindpunten van deze lijnen worden gedistribueerd in cirkels, evenwijdig aan de X-Z vlak. Ik beschrijf de start punten op een cirkel met
X=Cube.Center.x+RADIUS*cos(theta)
Z=Cube.Center.z+RADIUS*Sin(theta)
Ik lay-out de eindpunten aan de andere kant van de kubus, in een soortgelijke cirkel, maar ik "twist" de cirkel rond de Y-as door een hoekige variabele met de naam lineAngle
X =cube.center.x+radius*cos(theta+lineAngle)
Z=Cube.Center.z+RADIUS*Sin(theta+lineAngle)
Ik trek u dan een lijn van elke beginpunt naar elk eindpunt. Als lineAngle 0 is, wordt deze regels vallen langs de muren van een cilinder. Elk frame, ik verhoging van lineAngle, en het is alsof ik de start cirkel ten opzichte van de eind-cirkel draaien ben. Zodra lineAngle op een veelvoud van 2 krijgt * PI, alles is niet getwist, en de cyclus begint opnieuw.
Een andere functie Markeer hier: kleurenkaart
Kleurenkaart is ingebouwd in de L3D bibliotheek. Het duurt in drie parameters:
kleur L3D.colorMap (waarde drijven, zweven min, max zweven)
Het geeft een kleur van de regenboog, gebaseerd op waar waarde in het bereik van min tot max valt. Dit is een gemakkelijke manier om de plonsen van kleur toevoegen aan een programma.