将数组中的灯存储为对象

时间:2016-01-07 12:04:39

标签: object shader processing

是否可以将多个灯光(例如pointLights)存储到阵列中? Processing将它们视为内置方法,那么将它们作为对象进行转换的方法呢?

示例:

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

        pointLight((int)(rnd.nextDouble() *255), (int)(rnd.nextDouble() *255), (int)(rnd.nextDouble() *255), (int)(rnd.nextDouble() *1000-1000),(int)(rnd.nextDouble() *1000-1000),(int)(rnd.nextDouble() *1000-1000));

        lights.add(light);
      }

1 个答案:

答案 0 :(得分:0)

您可以创建一个类,它封装了绘制灯光所需的所有信息。像这样:

class Light{
   float v1;
   float v2;
   float v3;
   float x;
   float y;
   float z;

   public Light(float v1, float v2, float v3, float x, float y, float z){
      this.v1 = v1;
      this.v2 = v2;
      this.v3 = v3;
      this.x = x;
      this.y = y;
      this.z = z;
   }

   public void draw(){
      pointLight(v1, v2, v3, x, y, z);
   }
}

然后要使用该类,您只需创建一个ArrayList Light个实例,然后迭代这些实例以绘制灯光:

ArrayList<Light> lights = new ArrayList<Light>();

void setup(){

   size(1000, 1000);

   for (int i = 0; i < nLight; i++) {
      lights.add(new Light(random(255), random(255), random(255), random(-1000, 1000), random(-1000, 1000), random(-1000, 1000)));
   }
}

void draw(){
   background(0);

   for(Light light : lights){
      light.draw();
   }
}