Étape 6: primitives 3D: sphères
Nous allons donc regarder dessiner quelques formes solides réels. Une sphère est un bon point de départ. Disons que nous voulons dessiner une sphère de rayon r, centré sur le point p.
Une chose que j’ai remarqué avec des graphismes de cube--sphères solides ne semblent effectivement très bon--avec la plupart des graphiques, vous souhaitez dessiner la surface, mais laissez l’intérieur vide. Si vous remplissez la forme entière, vous obtiendrez un blob très lumineux, mais il n’ajoute des informations supplémentaires sur la forme. Résolution est très limitée en cubes, donc j’essaie de garder les LEDs au minimum que j’ai besoin et se concentrer sur transmettre les informations de forme.
Dessin d’un cube est semblable aux processus que j’ai utiliser pour dessiner en CAO. Je commencer par le dessin d’une section circulaire de LEDs et tournent ensuite cette section transversale autour d’un axe pour créer une sphère. Pour dessiner un cercle, je pourrais écrire une boucle simple comme :
for(float angle=0;angle<2*PI;angle+=.1) setVoxel(p.x + radius*cos(angle), p.y + radius * sin(angle), p.z, color(255));
Pour faire tourner ce cercle, je voudrais nichent la boucle du cercle à l’intérieur d’une autre boucle, comme suit :
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 boum, j’ai une sphère !
Bien sûr, ceci est incorporé dans la bibliothèque. Au lieu d’écrire cette boucle vous-même, vous pouvez simplement appeler
L3D.sphere(PVector center, float radius, color col)
et l’objet prendra soin de dessiner une sphère dans le cube.
Pour plus d’informations, consultez l’exemple de sphères dans la bibliothèque, qui est ce qui produit le gif animé ci-dessus.