Код:
//функция построения примитива светодиода и пример применения
///////////////////
float rotX = 0.0, rotY = 0.0;
int lastX, lastY;
float distX = 0.0, distY = 0.0;
float X,Y;
///////////////////
int R=50;
void setup() {
size(900, 650, P3D);
}
void draw() {
background(0);
lights();
translate(width/2, (height/3));
////////////////////
if (mousePressed ){X=rotX + distY; Y=rotY + distX;}
rotateX(X); rotateY(Y);
///////////////////
noStroke();
fill(0,255,170);
svetodiod_(R); fill(0,255,170);
translate(4*R,0,0);svetodiod_(R); fill(0,255,170);
translate(-8*R,0,0);svetodiod_(R); fill(0,255,170);
translate(12*R,0,0);svetodiod_(R); fill(0,255,170);
translate(-16*R,0,0);svetodiod_(R); fill(0,255,170);
}
//////////////////////////////////////////////////////////
void svetodiod_(float d)
{
prizma_(3*d/2,d,70);
translate(0,-80*d/100,0);sphere(d);translate(0,80*d/100,0);
translate(0,3*d/4,0);prizma_(3*d/8,5*d/4,70);translate(0,-3*d/4,0);
fill(255);
translate(0,4*d,-d/2);box(d/6,7*d,d/6);translate(0,-4*d,d/2);
translate(0,4*d,d/2);box(d/6,7*d,d/6);translate(0,-4*d,-d/2);
}
void prizma_(float h,float r,int N)//аргументы - высота, радиус, число граней призмы-цилиндра
{
translate(-r*sin(PI/N),-h/2,r*cos(PI/N));
for(int i=0;i<N;i++)
{
translate(2*r*sin(PI/N),0,0);
rotateY(2*PI/N);
rect(0,0,2*r*sin(PI/N),h);
rotateX(PI/2);triangle(0,0,2*r*sin(PI/N),0,r*sin(PI/N),-r*cos(PI/N));rotateX(-PI/2);
translate(0,h,0);rotateX(PI/2);triangle(0,0,2*r*sin(PI/N),0,r*sin(PI/N),-r*cos(PI/N));rotateX(-PI/2);translate(0,-h,0);
}
translate(r*sin(PI/N),h/2,-r*cos(PI/N));
}
//////////////////////////////////////////////////////////
/////////////////// функции положения курсора и вращения колеса ////////////////////////////////////////////
void mousePressed() { lastX = mouseX; lastY = mouseY; }//когда нажата
void mouseDragged() { distX = radians(mouseX - lastX); distY = radians(lastY - mouseY); }//когда движется
void mouseReleased() { rotX += distY; rotY += distX;distX = distY = 0.0; }//когда отпущена
void mouseWheel(MouseEvent event){R=R+5*event.getCount();}//приближение-удаление куба с помощью колеса мыши
Вот полезная штука из цилиндра.
Сделал для тренировки ещё пирамиду-конус. Дальше ясно всё-берём треугольники и делаем любую поверхность - замкнутую или не очень, вот и всё 3D моделирование примитивов... Эх надо было учить лучше математику.