本案例要点:
(1)旋转复杂不规则图形;
(2)运用二维数组定义图形;
(3)鼠标左右移动控制物体沿 Y 轴旋转;
(4)点击鼠标线条变色。
效果图如下:
复杂图形3D旋转演示.gif
代码如下:
int [][]myArray;//define angle of rotationfloat angle_1;
void setup() {
size(500, 500, P3D);
smooth(); //Define two dimensional array
myArray=new int[200][3]; for (int i=0; i<100; i++) { for (int j=0; j<3; j++) {
myArray[i][j]=int(random(-100, 100));
}
}
}void draw() {
background(200);
translate(width/2, height/2, 0);
rotateY(radians(angle_1));
noFill(); //draw the shape to rotate
box(200);
beginShape(); for (int i=0; i<myArray.length; i++)
{
vertex(myArray[i][0], myArray[i][1], myArray[i][2]);
}
endShape();
}void mousePressed() {
stroke(random(255),random(255),random(255));
}void mouseMoved() {
angle_1=map(mouseX, -width/2, width/2, 0, 360);
}注意:
因为要是一个固定的图形进行旋转,不同于上一篇《Processing雁群实验》中的变动图形,这要求3D位点坐标要在setup()函数中提前赋值。如果在draw()中赋值则每次循环都重新随机画图,不符合本例要求。
拓展1:用坐标点画规则图形
规则图形可以在3D坐标中定义坐标点,如上例中的坐标点由随机变为规则,变化的代码如下:
int [][]myArray={
{0,0,0},
{200,0,0},
{200,0,200},
{0,0,200},
{0,0,0},
{0,100,0},
{100,200,0},
{200,200,0},
{200,0,0},
{200,0,200},
{200,200,200},
{200,0,200},
{200,0,0},
{200,200,0},
{100,200,0},//{0,200,100},
{0,100,0},
{0,200,100},
{0,200,200},
{0,0,200},
{0,200,200},
{200,200,200},
{200,200,0},
};动态效果如图:
规则图形3D旋转演示
作者:一石匠人
链接:https://www.jianshu.com/p/e95787a57446