3Dサンプル(sketch_3D_Z_Pipe)パイプスケッチ
3Dサンプル(sketch_3D_Z_Pipe)パイプスケッチは以下となります。
//sketch_3D_Z_Pipe
void setup()
{
size(400, 400, P3D);
}
void draw()
{
background(255, 255, 255);
lights();
ortho(-width/2, width/2, -height/2, height/2); // Same as ortho()
translate(width / 2, height / 2);
rotateY(map(mouseX, 0, width, -PI/1, PI/1));
rotateX(map(mouseY, 0, height, PI/1, -PI/1));
//noStroke();
strokeWeight(0.5);
fill(255, 255, 255);
scale(1, 1,1);
Z_Pipe(30.25,26.45,100);//パイプ
}
void Z_Pipe(float Ro,float Ri,float L)//パイプ
{
pushMatrix();
Z_Cylinder(Ro,L);
Z_Cylinder(Ri,L);
translate(0,0,-L/2);
Z_Ring_2D(Ro,Ri);
translate(0,0,L);
Z_Ring_2D(Ro,Ri);
popMatrix();
}
void Z_Cylinder(float r,float L)//円筒
{
int sides=16;//分割数
int i;
beginShape(QUAD_STRIP);
for (i = 0; i < sides + 1; ++i)
{
float angle = i*TWO_PI/sides;
vertex(r*cos(angle), r*sin(angle), -L/2);
vertex(r*cos(angle), r*sin(angle), L/2);
}
endShape(CLOSE);
}
void Z_Ring_2D(float Ro,float Ri)
{
int sides=16;//分割数
int i;
beginShape();
for (i = 0; i < sides + 1; ++i)
{
float angle = i*TWO_PI/sides;
vertex(Ro*cos(angle), Ro*sin(angle),0);
}
beginContour();
for (i = 0; i < sides + 1; ++i)
{
float angle = -i*TWO_PI/sides;
vertex(Ri*cos(angle), Ri*sin(angle),0);
}
endContour();
endShape(CLOSE);
}