本案例要点:
(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