美文网首页
processing3D旋转动画

processing3D旋转动画

作者: bitzen | 来源:发表于2019-08-27 19:47 被阅读0次

    int num = 50;  //粒子数量

    ArrayList<Particle> particles;

    PVector Rotate;

    Particle tempP;

    void setup(){

      size(1080,680,P3D); //使用P3D,这样才能使用下面矩形旋转的功能

      colorMode(HSB);

      Rotate = new PVector();

      particles = new ArrayList<Particle>();

      for(int i = 0; i < num; i++){

        particles.add( new Particle() );

      }

      background(255);

    }

    void draw(){

      // 下面3行制造画面的残影效果。如果不用残影的话就是直接画个background

      noStroke();

      fill(255, 18);

      rect(0,0,width,height); 

     

      //下面给矩阵计算3个轴向的旋转,根据时间来变化

      Rotate = new PVector(frameCount*0.003, frameCount*0.04, frameCount*0.03);

      pushMatrix();

      translate(width/2, height/2);//这个……不用我在这里解释了吧,官方教程可以2分钟看懂。看懂这行再看下面的内容吧

      rotateX(Rotate.x);//把上面计算出来的旋转值分配进去

      rotateY(Rotate.y);

      rotateZ(Rotate.z);

      //刷新粒子类

      for(int i = particles.size()-1; i >= 0; i--){

        tempP = particles.get(i);

        tempP.move();

      }

      popMatrix();

    }

    class Particle{

      PVector pos,radian;

      float dis,h,s,b;

      float _weight = 18;//粒子的半径

      Particle(){

        //随机给每个粒子定义它在假想中的球体上的弧度,供下面去算具体的坐标

        radian = new PVector(random(TWO_PI), random(TWO_PI)); 

        pos = new PVector();

        dis = 160;//假想球体的半径

      }

     

      void move(){

        update();

        display();

      }

     

      void update(){

        //这就是Google上的公式,通过随机出来的弧度获得其具体坐标

        pos.x = dis*sin(radian.x)*cos(radian.y);

        pos.y = dis*cos(radian.x)*cos(radian.y);

        pos.z = dis*sin(radian.y);

      }

     

      void display(){

        //随便写了点颜色变化,感兴趣的可以看看

        h = noise(radian.x*0.3, frameCount*0.012)*95 + 130 + map(mouseX, 0 ,width, -20, 20);

        noStroke();

        fill(h,85,255);

        //下面是用 sphere() 来画粒子,不能像 point() 一样直接指定坐标,sphere()只能在原点画。所以在这里要临时移动一下矩阵,画完再把矩阵挪回去。

        translate(pos.x,pos.y,pos.z);

        sphere(_weight);

        translate(-pos.x,-pos.y,-pos.z);

      }

    }

    相关文章

      网友评论

          本文标题:processing3D旋转动画

          本文链接:https://www.haomeiwen.com/subject/hrsyectx.html