void render() {
    Color3 endColor = Color3.BLACK;
    System.out.println("RE calculating the image");
    int i, j, k;
    for (i = 0; i < viewer.getWidth(); i++) {
      for (j = 0; j < viewer.getHeight(); j++) {
        endColor = Color3.BLACK;
        for (k = 0; k < numScreens; k++) {
          float tempr =
              ((float) screens[k].getPixel(i, j).getR())
                  * ((float) ((instrument) proj_class.instruments.get_object(k)).getLevel()
                      / (float) 100.0);
          float tempg =
              ((float) screens[k].getPixel(i, j).getG())
                  * ((float) ((instrument) proj_class.instruments.get_object(k)).getLevel()
                      / (float) 100.0);
          float tempb =
              ((float) screens[k].getPixel(i, j).getB())
                  * ((float) ((instrument) proj_class.instruments.get_object(k)).getLevel()
                      / (float) 100.0);
          if ((tempr != 0) || (tempg != 0) || (tempb != 0)) {

            float newr = tempr + (float) endColor.getR();
            float newg = tempg + (float) endColor.getG();
            float newb = tempb + (float) endColor.getB();
            if (newr > 1) {
              newr = 1;
            }
            if (newg > 1) {
              newg = 1;
            }
            if (newb > 1) {
              newb = 1;
            }
            endColor = new Color3(newr, newg, newb);
          }
        }
        viewer.setPixel(i, j, endColor.toRGB());
      }
    }
    newRender = true;
    repaint();
  }
  public void loadData() {
    //    if(!dataLoaded){

    scale = 1;
    maxX = 0;
    maxY = 0;
    minX = 640;
    minY = 480;
    numScreens = proj_class.instruments.get_num_objects();

    screens = new Bitmap[numScreens];
    levels = new int[numScreens];

    int i;
    for (i = 0; i < (proj_class.instruments.get_num_objects()); i++) {
      ((instrument) proj_class.instruments.get_object(i)).setLevel(100);
    }

    for (i = 0; i < numScreens; i++) {
      screens[i] = new Bitmap(640, 480, false);
      int x, y;
      for (x = 0; x < 640; x++) {
        for (y = 0; y < 480; y++) {
          screens[i].setPixel(x, y, Color3.BLACK);
        }
      }

      levels[i] = 0;
      int j;
      for (j = 0; j < proj_class.photonmap.getStoredPhotons(); j++) {
        Photon pho = proj_class.photonmap.getPhoton(j);
        if (pho != null) {
          if (pho.lightSource == i) {

            screens[i].setPixel((int) pho.x, 480 - (int) pho.z, new Color3(pho.R, pho.G, pho.B));
            if ((int) pho.x > maxX) {
              maxX = (int) pho.x;
            }
            if ((480 - (int) pho.z) > maxY) {
              maxY = (480 - (int) pho.z);
            }
            if ((int) pho.x < minX) {
              minX = (int) pho.x;
            }
            if ((480 - (int) pho.z) < minY) {
              minY = (480 - (int) pho.z);
            }
          }
        }
      }

      screens[i].save("lightscreen" + i + ".png");
    }
    viewer = new Bitmap(640, 480, false);
    int j;
    for (i = 0; i < viewer.getWidth(); i++) {
      for (j = 0; j < viewer.getHeight(); j++) {
        viewer.setPixel(i, j, Color3.BLACK);
      }
    }
    //            dataLoaded=true;
    //      }
    int tempx = 0;
    int tempy = 0;
    if (maxX != 0) {
      tempx = 640 / maxX;
    }

    if (maxY != 0) {
      tempy = 480 / maxY;
    }

    if (tempx > 0) {
      if (tempx > tempy) {
        scale = tempx;
      }
    }
    if (tempy > 0) {
      if (tempy > tempx) {
        scale = tempy;
      }
    }
  }