コード例 #1
0
void drawTree(FastVoxelView &vv,Pos3D base,float h)
{
  Pos3D p1(0,0,0),p2(0,0,0),p3(0,0,0);
  Color c(0x99,0x69,0);
  Color bc(0,0xAA,0);

  p1=base;
  p2=base+Pos3D(0,1,0)*h*0.25;
  p3=base+Pos3D(0,1,0)*h*0.5;

  cdebug(p1<<p2<<p3);

  Trunk t(p1,p2,p3,7,5);

  std::list<Trunk> tlist,nlist;

  tlist.push_back(t);

  int rw=h/4;

  float angle=M_PI/1.5; // 30 degrees

  int last=5;

  for(int i=0;i<=last;i++)
    {
      std::cout<<"_______________"<<std::endl;
      std::list<Trunk>::iterator k=tlist.begin();

      for(;k!=tlist.end();k++)
	{
	  Pos3D dir=k->p3 - k->p2;

	  int count=4;

	  std::list<Pos3D> l=splitDir(dir,count,angle,M_PI/count/8.0,0);//M_PI/count,angle/3);

	  std::list<Pos3D>::iterator j=l.begin();

	  for(;j!=l.end();j++)
	    {

	      Pos3D r=*j;


	      r=r*rw;

	      int mi=i+1;
	      // c=Color(mi&1,(mi>>1)&1,(mi>>2)&1);

	      /*	      drawBall(vv,k->p1,4,c);
	      drawBall(vv,k->p2,3,c);
	      drawBall(vv,k->p3,2,c);*/

	      	  
	      draw3Line(vv,k->p1,k->p2,k->p3,c,40,k->w1,k->w2);
	      if(i==last)
		draw3Line(vv,k->p1,k->p2,k->p2,bc,4,2,1);


	      
	      float start=0.6;

	      start+=getRandEq()*0.3;

	      Pos3D sp=bezier(start,
			       k->p1,k->p2,k->p3);
	      //	      Pos3D np(k->p3*2-k->p2+Pos3D(rx,ry,rz));
	      Pos3D np(k->p3*2-k->p2+r);
	      




	      Trunk nt(sp,
		       sp*0.5+np*0.5+getRandPos(rw),
		       np,
		       k->w2,k->w2-1);
	      nlist.push_back(nt);


	    }

	}
      rw*=0.9;
      tlist.clear();
      cdebug(nlist.size());
      tlist=nlist;
      nlist.clear();
    }


  // roots
  std::list<Pos3D> l=splitDir(Pos3D(0,-1,0),4,M_PI/4,0,0);
  
  std::list<Pos3D>::iterator j=l.begin();
  for(;j!=l.end();j++)
    {
      Pos3D n=*j * 10 + base;
      draw3Line(vv,base,base*0.5+n*0.5,n,c,40,t.w1,t.w2);
    }
  

}
コード例 #2
0
Pos3D getRandDirOrtho(Pos3D dir)
{
  return (getRandPos(250)%dir).normalized();
}
コード例 #3
0
ファイル: BeanLayer.cpp プロジェクト: kjiwu/Snake
void BeanLayer::start()
{
	m_bean->setPosition(m_backgroundLayer->positionAt(getRandPos()));
	schedule(schedule_selector(BeanLayer::disappearCallback), BEAN_EXIST_TIME, 1, 0);
}