Étape 3: Marcher sur cette ligne
Un seul voxel de dessin est très bien, mais parfois vous souhaitez dessiner des choses plus complexes. C’est là où la fonction
L3D.line(PVector start, PVector end, color col)
est très pratique. Comme son nom l’indique, il trace une ligne du Démarrer pour les points d’extrémité et le dessine dans la couleur spécifiée. Si vous aimez l’aspect de cette ligne, vous avez Jack Bresenham remercie--il a écrit cette fonction astucieuse appelée algorithme de Bresenham que nous utilisons pour dessiner presque chaque ligne en infographie tous. La bibliothèque utilise une application 3D d’algorithme de Bresenham pour dessiner dans le cube.
Jetez un oeil à l’exemple de ligne de la bibliothèque. La plupart de celui-ci est le même que nous avons vu dans l’exemple de cligner des yeux . La différence est dans la fonction draw() :
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(); }
Dans cette fonction, je peins des six lignes. Le départ et l’arrivée de ces lignes sont distribuées dans les cercles, parallèles au plan X-Z. J’ai décrit les points de départ sur un cercle de
X=Cube.Center.x+RADIUS*cos(theta)
Z=cube.Center.z+RADIUS*Sin(theta)
J’ai jeter les points d’extrémité à l’autre extrémité du cube, dans un cercle semblable, mais j’ai « twist » le cercle autour de l’axe des Y par une variable angulaire appelée lineAngle
X =cube.center.x+radius*cos(theta+lineAngle)
Z=cube.Center.z+RADIUS*Sin(theta+lineAngle)
J’ai ensuite tracer une ligne entre chaque point de départ pour chaque point de terminaison. Si lineAngle est 0, ces lignes tombent le long des parois d’un cylindre. Toutes les images, j’ai augmenter lineAngle, et c’est comme si je suis une torsion du cercle de départ par rapport au cercle de la fin. Une fois que lineAngle arrive à un multiple de 2 * PI, tout est sans torsion, et le cycle recommence.
Une autre fonction de mettre en évidence ici : la palette des couleurs
la palette des couleurs sont intégré à la bibliothèque de L3D. Il prend trois paramètres :
couleur L3D.colorMap (float value, float min, float max)
Elle retourne une couleur de l’arc-en-ciel, issu des où valeur comprise entre min au maximum. Il s’agit d’un moyen facile d’ajouter des taches de couleur à un programme.